個人開発者をサポートするQ&Aツール

個人開発者・フリーランスエンジニア・リモートプログラマの
問題解決をサポートするサービスです

登録不要ですぐに質問を開始できます

MySQLのWhere句の中でCase文を複数繋げる方法

解決済 50pt 2件

MySQLのWhere句内で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文を複数連結したいんです。

名もなきエンジニアのプロフィール画像 名もなきエンジニア

回答

この質問はすでに終了しているため、回答できません