我有两个表,它们之间有许多对多个基数。因此,通过标准化,我创建了以下内容:
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。
还有什么其他有效的可能方法来实现这一点?
发布于 2011-09-30 22:56:05
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) = 7https://stackoverflow.com/questions/7612154
复制相似问题