質問: 現在mysqlでデータ取得のコードを書いています。 質問があるのですが、 結論からいうと、 case文で条件に一致したら複数項目を取得するにはどのうようにすればいいでしょうか? 具体的な状況は次のとおりです。 料理テーブルに「食べ物フラグ」カラムがあり、1だと「野菜」、2だと「フルーツ」「お菓子」カラムを取得します。 そこでcase文を使って書こうとしているのですが、複数取得の方法がわかりません。 select case 食べ物フラグ when '1' then 野菜 when '2' then フルーツ,お菓子 else null end from 料理テーブル のような書き方はできますでしょうか? もしできないようであれば他の方法を教えていただけると助かります。
回答: まず命題のSQLは不可能です 代替案として ``` create table 料理テーブル(id int not null primary key,野菜 varchar(20) null,フルーツ varchar(20) null,お菓子 varchar(20) null,食べ物フラグ tinyint); insert into 料理テーブル values(1,'にんじん',null,null,1),(2,'じゃがいも',null,'じゃがりこ',1),(3,'きゅうり','きゅうり',null,2),(4,null,null,'きのこの山',2),(5,null,'バナナ','バナナ',2),(6,null,null,null,0); ``` に対して複数項目を得るときにはCONCATでひろうとか ``` select case 食べ物フラグ when 1 then 野菜 when 2 then CONCAT(COALESCE(フルーツ,''),',',COALESCE(お菓子,'')) else null end AS 食べ物 from 料理テーブル; ``` しかしこれだとどちらかにしかデータがない場合中途半端なカンマがつくので 気持ち悪い、たとえばどちらか取ればいいなら ``` select case 食べ物フラグ when 1 then 野菜 when 2 then COALESCE(フルーツ,お菓子) else null end AS 食べ物 from 料理テーブル; ``` もしくは視点を変えてカラムは表示するけどNULLにするとか ``` select if(食べ物フラグ=1,野菜,null) AS 野菜 ,if(食べ物フラグ=2,フルーツ,null) AS フルーツ ,if(食べ物フラグ=2,お菓子,null) AS お菓子 ,食べ物フラグ from 料理テーブル; ```