我有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。
实现这一目标的其他有效方法有哪些?
答案 0 :(得分: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