!カンマ区切りを縦展開する select 部品名,仕様 from 部品 where 仕様 <> ''; +------+-------------------+ |部品名|仕様 | +------+-------------------+ |山田 |リンゴ,葡萄,もも,柿| |中山 |もも | |斎藤 |葡萄,柿 | +------+-------------------+ select * from ( with recursive rec(部品名,item1,item2,仕様) as ( select 部品名,substr(仕様,1,locate(',',仕様) -1) as item1 ,substr(仕様,locate(',',仕様) +1,length(仕様)) as item2,仕様 from 部品 where 仕様 <> '' union all select 部品名,substr(item2,1,locate(',',item2) -1) as item1 ,substr(item2,locate(',',item2) +1,length(item2)) as item2,item2 as 仕様 from rec where item1 <> '') select 部品名,case when item1 = '' then item2 else item1 end as item1 from rec ) m +------+------+ |部品名|item1 | +------+------+ |山田 |リンゴ| |中山 |もも | |斎藤 |葡萄 | |山田 |葡萄 | |斎藤 |柿 | |山田 |もも | |山田 |柿 | +------+------+ !Subject : [mysql 15783] カテゴリ毎の上位3件 こんばんは。shin1です。 価格データから、各カテゴリ毎の売価が安いものTOP3を 一覧にしたいのですが、こういう項目のテーブルがあったとします。 create table saledata ( saleid int auto_increment, category varchar(20), name varchar(200), price int, primary key (saleid) ); 他のエンジンなら、以下のような感じだと思うのですが MySQLではサブクエリのLIMITが使えないと知り、困っています。 MySQLではこういう場合、どのように記述すれば良いのでしょうか。 select category, name, price from saledata AS t where saleid in ( select saleid from saledata where category=t.category order by price asc limit 3 ) order by category asc, price asc たぶん、良くある例な気がしますが、ネットで探し当てられ ませんでした。よろしくお願い致します。 !私の解 select a.saleid,a.category,a.name,a.price ,(select count(*)+1 from saledata b where b.category = a.category and b.price < a.price) rank from saledata a having rank <= 3 order by category,rank サブセレクトが使えないMYSQL select a.saleid,a.category,a.name,a.price,count(b.saleid)+1 rank from saledata a left join saledata b on (b.category = a.category and b.price < a.price) group by a.saleid having rank <= 3 order by a.category,rank