LoginSignup
4
4

More than 5 years have passed since last update.

縦持ちデータからSQLでAND条件抽出

Last updated at Posted at 2015-09-10

やりたいこと

組み合わせで縦持ちしているテーブルがあると思います。
権限管理やグループ管理とかでよく使うやつかと。

userid groupid
u01 g01
u01 g02
u01 g03
u02 g02
u02 g03
u03 g01
u04 g01
u04 g02
u05 g02

ここから、「g01とg02の両方に属している(AND)useridを抽出」したいのです。

ぱっと思いつかず調べてみると、
「横持ちに変換する」ソリューションがよくヒットしましたが、
groupidが運用によって増えていくような状況だと、あまり適しません。

思いついた

当然他でもやっている方はいらっしゃるでしょうが、あまり見かけなかったので紹介します。

select userid, count(1) from table where groupid in ('g01','g02') group by userid having count(1) = 2

userid count(1)
u01 2
u04 2

in句に入る個数をhaving句にも入れる感じです。
'g01','g02','g03' なら having count(1) = 3

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4