我有 2 个表,它们之间有很多基数。所以通过规范化,我创建了这个:
User
UserId UserName ....
1 a
2 b
UserObject
UserId ObjectId
1 1
1 2
2 2
Object
ObjectId ObjectName
1 c
2 d
现在我想运行一个查询来了解拥有特定对象的用户。
例如:同时拥有对象c和d的所有用户。
一种方法
Select userid from UserObject where objectid=1 intersect Select userid from UserObject where objectid= 2
根据我的用例,我可能需要搜索具有 2-7 个对象组合的用户。写这么多交集会不谨慎。
我正在研究 postgesql 9.1。
实现这一目标的其他有效方法是什么?
最佳答案
SELECT uo.UserId
FROM UserObject uo
WHERE uo.ObjectId IN (1,2)
GROUP BY uo.UserId
HAVING COUNT(DISTINCT uo.ObjectId) = 2
将这个概念扩展到 7 个对象:
SELECT uo.UserId
FROM UserObject uo
WHERE uo.ObjectId IN (1,2,3,4,5,6,7)
GROUP BY uo.UserId
HAVING COUNT(DISTINCT uo.ObjectId) = 7
关于sql - 在我的 sql 查询中使用相交运算符的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612154/