どもです。割と多用するのに忘れがちなので備忘録。
結論から言うと “ HAVING COUNT(条件 OR NULL) ” で大体解決する。
例えばこういったテーブルで。
| tableA | |
|---|---|
| id | value |
| A | 1 |
| A | 2 |
| A | 3 |
| B | 1 |
| B | 2 |
SELECT * FROM tableA GROUP BY tableA.idvalueをそれぞれOR検索、AND検索、NOT検索して結果を取り出したい場合は?
OR検索
これは単純に実現できる。
WHERE value IN (1,2)でもSELECTの結果に検索対象外カラムの情報が欲しい場合は、ANDやNOTと同様にHAVINGを使う。
HAVING COUNT(value IN (1,2) OR NULL) > 0AND検索
WHEREでなくHAVINGを使う。※COUNT(X OR NULL)は条件を満たす場合のみ計上する
HAVING COUNT(value IN (1,2) OR NULL) = 2NOT検索
WHEREでなくHAVINGを使う。
HAVING COUNT(value IN (1,2) OR NULL) = 0値が動的になったりJOINしてSQLが複雑化したりても、基本形は同じ。