🤮

複数カラムの組み合わせでWHERE


やりたいこと

novalue の組み合わせで絞り込みたい。 ただし、複数の条件を 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