我有两张桌子,两张桌子之间有多对多的基数。所以通过规范化,我创建了:
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个对象组合的用户。写这么多交集是不明智的。
我正在研究Postgesql9.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查询中使用Intersect运算符的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7612154/