複数カラムの組み合わせでWHERE
やりたいこと
no
と value
の組み合わせで絞り込みたい。
ただし、複数の条件を 1 つのクエリで指定できること。
たとえば、no = 1
かつ value = "value1"
のレコードと、no = 2
かつ value = "value4"
のレコードを取得したい、のように。
+----------------------------+
| id | user_id | no | value |
+----------------------------+
| 1 | 1 | 1 | value1 |
+----------------------------+
| 2 | 1 | 2 | value2 |
+----------------------------+
| 3 | 1 | 3 | value3 |
+----------------------------+
| 4 | 2 | 1 | value3 |
+----------------------------+
| 5 | 2 | 2 | value4 |
+----------------------------+
| 6 | 2 | 3 | value5 |
+----------------------------+
どうやるの?
実は IN 句でかけてしまう。
SELECT * FROM table
WHERE (no, value) IN ((1, "value1"), (2, "value4"))
value
を LIKE 検索したいよ、と言われたら CASE でがんばる。
SELECT * FROM table
WHERE
CASE
WHEN no = 1 THEN
CASE
WHEN value like "%value1%" THEN 1
ELSE 0
END
WHEN no = 2 THEN
CASE
WHEN value like "%value4%" THEN 1
ELSE 0
END
ELSE 0
END