ど素人から毛を生やす。<延>

[MySQL]GROUPしたテーブルのOR検索、AND検索、NOT検索

Web > Other 2026年1月7日(最終更新:1日前)

どもです。割と多用するのに忘れがちなので備忘録。
結論から言うと “ HAVING COUNT(条件 OR NULL) ” で大体解決する。

例えばこういったテーブルで。

tableA
idvalue
A1
A2
A3
B1
B2
SELECT * FROM tableA GROUP BY tableA.id

valueをそれぞれOR検索、AND検索、NOT検索して結果を取り出したい場合は?

OR検索

これは単純に実現できる。

WHERE value IN (1,2)

でもSELECTの結果に検索対象外カラムの情報が欲しい場合は、ANDやNOTと同様にHAVINGを使う。

HAVING COUNT(value IN (1,2) OR NULL) > 0

AND検索

WHEREでなくHAVINGを使う。※COUNT(X OR NULL)は条件を満たす場合のみ計上する

HAVING COUNT(value IN (1,2) OR NULL) = 2

NOT検索

WHEREでなくHAVINGを使う。

HAVING COUNT(value IN (1,2) OR NULL) = 0

値が動的になったりJOINしてSQLが複雑化したりても、基本形は同じ。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)