我想检查一个元组是否在选定的行中。
我有一个用户,例如下一个(简化):
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 in org_cat with 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!