タプルが選択した行にあるかどうかを確認したいと思います。
次のようなユーザーがいます(簡略化):
user_id int,
company_id,
subcompany_id
次のようなorg_catモデル:
cat_id,
company_id,
subcompany_id
cat_id=2 のカテゴリに属するすべてのユーザーのユーザー ID を選択したいと考えています。
次は間違っています。
SELECT
user_id
FROM "user"
WHERE
company_id IN ( SELECT company_id FROM org_cat where cat_id=2 )
AND
subcompany_id IN ( SELECT subcompany_id FROM org_cat where cat_id=2 );
{ 1, 3 }、{ 2, 3 }、{ 3, 3 } の組み合わせがある場合 (会社では company_id、subcompany_id および company_id=1、subcompany_id=3 は org_cat で cat_id=2の場合、すべての行がから選択されます。ユーザー- それは正しくありません。
私は私にとって間違った解釈をする次のクエリを意味します:
SELECT
user_id
FROM "user"
WHERE
( company_id, subcompany_id ) IN ( SELECT company_id, subcompany_id FROM org_cat where cat_id=2 );
postgresql はおそらく ( company_id, subcompany_id ) がタプルであるとは考えていないためです。
正しいクエリの作成を手伝っていただけませんか?
更新します。
実際、「( company_id, subcompany_id ) IN...」を含むバリアントも有効ですが、答えより少し遅くなります。ありがとう、a_horse_with_no_name !