MySQLのWhere句の中でCase文を複数繋げる方法
解決済
50pt
2件
MySQLのWhere句内でCase文を使っています。
1つのCase文では問題ないのですが、複数のCase文を連結しようとするとエラーが発生してしまいます。
どのようにすればCase文を複数連結することができますか?
1つのCase文では問題ないのですが、複数のCase文を連結しようとするとエラーが発生してしまいます。
どのようにすればCase文を複数連結することができますか?
OK
SELECT `id` FROM `A_tbl` WHERE CASE WHEN `no` = 1 THEN `no` = (SELECT `no` FROM `B_tbl`) END
NG
SELECT `id` FROM `A_tbl` WHERE CASE WHEN `no` = 1 THEN `no` = (SELECT `no` FROM `B_tbl`) END CASE WHEN `no` = 2 THEN `no` = (SELECT `no` FROM `C_tbl`) END
mysql
ベストアンサーに選ばれた回答
複数のCase文をWhere句内で連結するんじゃなくて、それぞれの条件を抽出するSelect文自体をUnionで連結してみてはどうでしょうか?
具体的にはこんな感じです
具体的にはこんな感じです
SELECT `id` FROM `A_tbl` WHERE CASE WHEN `no` = 1 THEN `no` = (SELECT `no` FROM `B_tbl`) END UNION SELECT `id` FROM `A_tbl` WHERE CASE WHEN `no` = 2 THEN `no` = (SELECT `no` FROM `C_tbl`) END
回答の編集
この質問はすでに終了しているため変更できません
MySQLのCase式は
CASE no WHEN 1 THEN 'true' WHEN no = 2 THEN 'true' WHEN no = 3 THEN 'false' END
のような使い方をします。
なので以下のようにしてみてください。
なので以下のようにしてみてください。
SELECT `id` FROM `A_tbl` WHERE CASE WHEN `no` = 1 THEN `no` = (SELECT `no` FROM `B_tbl`) WHEN `no` = 2 THEN `no` = (SELECT `no` FROM `C_tbl`) END
回答の編集
この質問はすでに終了しているため変更できません
すみません、Caseを使ってif else的な使い方がしたいのではなく、if文を複数連結したいんです。

未解決の質問
配列をforeachで取り出すときにエラーになる 50pt |
htaccessとindex.php(index.html)はどちらが先に読み込まれるのか 10pt |
PHPでシングルクォーテーションとダブルクォーテーションの違いは何? 50pt |