tableA
code,name
1,aさん
2,bさん
3,cさん
4,dさん
5,eさん
tableB
code,mode,add
1,e,東京都
1,e,大阪府
1,e,愛知県
1,e,宮城県
1,e,福岡県
1,h,長野県
1,h,大阪府
1,s,大阪府
2,e,千葉県
2,s,大阪府
2,h,大阪府
3,e,大阪府
3,h,東京都
4,e,北海道
4,e,愛知県
4,h,東京都
5,e,東京都
5,e,愛知県
上記のテーブルから「add」を「大阪府」で検索した場合、
下記のような表示をしたい場合のSQL(MySQL4.x)を教えてください。
aさん,e,h,s
bさん, ,h,s
cさん,e, ,
よろしくお願いします。
上記の条件だけでやってみました。
SELECT
tableA.name AS name,
CASE WHEN SUM(CASE tableB.mode WHEN 'e' THEN 1 ELSE 0 END) > 0 THEN 'e,' ELSE ',' END ||
CASE WHEN SUM(CASE tableB.mode WHEN 'h' THEN 1 ELSE 0 END) > 0 THEN 'h,' ELSE ',' END ||
CASE WHEN SUM(CASE tableB.mode WHEN 's' THEN 1 ELSE 0 END) > 0 THEN 's' ELSE '' END AS mode
FROM tableA LEFT JOIN tableB ON tableA.code = tableB.code
WHERE tableB.`add` = '大阪府'
GROUP BY tableA.name
CASE文が多くなるのが難点ですが。
コメント(3件)
>|
select
`name`,`mode`
from tableA
inner join tableB
on tableA.`code`=tableB.`code`
where `add`='大阪府'
order by tableA.`code`
|<
aさん,e
aさん,h
aさん,s
bさん,s
bさん,h
というように表示されますよね!?
この先は、phpでやると言う事ですか?
(phpは例としてです)
aさん,e,h,s
bさん, ,h,s
というようにSQLだけでできないでしょうか?
大量のデータの中から、例えば30〜40件目を表示したいので、
とりあえず全て上記のコードで検索して、
そのあと30〜40件目を抜き出すのでは大変な気がします。
何とかできないのでしょうか?
よろしくお願いします。
END ||
の部分を
END,
としてください。