【发布时间】:2017-02-25 22:57:11
【问题描述】:
我有桌子
CREATE TABLE Permission (uid char(32), pid char(32), term char(32),
PRIMARY KEY (uid, pid, term))
包含诸如
之类的值uid pid term
0001 1001 3
0001 1002 3
0001 1002 4
0002 1001 3
0002 1002 3
0002 1002 4
0003 1001 3
0003 1002 4
0003 1002 5
我想返回所有具有相同 pid 和 term 值的用户的 uid,在这个例子中我想要 0001 和 0002,但我不知道如何比较每个 uid 的 pid 和 term 值其他 uid 的 pid 和 term 值。我能得到的最接近的是确定每个用户是否有重复的 pid。
SELECT uid
FROM Permission
GROUP BY uid, pid
HAVING COUNT (*) > 1
我什至不确定这与我要执行的测试有关。和
SELECT uid
FROM (SELECT P1.uid, P1.pid
FROM Permission P1
WHERE EXISTS (SELECT P2.pid
FROM Permission P2
WHERE P1.pid = P2.pid)) P
GROUP BY P.uid
HAVING COUNT (P.pid) = (SELECT COUNT (P3.pid)
FROM Permission P3
WHERE P3.uid = P.uid)
我认为应该可行,但我显然错了,因为它只返回所有 uid =)
【问题讨论】:
标签: sql sql-server database