假设我有一个带有人员ID和其他东西ID的表格T1,如下所示
Table: T1
personID | stuffID
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 4
3 | 1
3 | 2
另一个表T2只有一列stuffID
Table: T2
stuffID
1
2
3
我得到的结果是SELECT
,是一个与所有T2的所有stuffID连接的peopleID表。
在示例之后,结果将只是id 1(即使所有关联的所有stuffID都包含在T2.stuffID中,personID 3也不会出现。)
答案 0 :(得分:3)
如果我理解正确,你想从T1中检索所有在T2中找到所有相关stuffID的personID。
您可以按如下方式解决此问题: 首先,找到与嵌套查询匹配的所有T1条目
SELECT personID
FROM T1 WHERE stuffID IN (SELECT stuffID FROM t2)
现在您需要检查此集合中的哪些条目包含您想要的所有stuffID
GROUP BY personID
HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM t2)
并将它们放在一起:
SELECT personID
FROM T1 WHERE stuffID IN (SELECT stuffID FROM t2)
GROUP BY personID
HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM t2)
HTH。
答案 1 :(得分:2)
select personID
from T1
where stuffID in (select stuffID from t2)
group by personID
having count(distinct stuffID) = (select count(*) from t2)
选择一个人在T2中的填充物,计算它们(仅限于区别),并验证与t2中相同的数字。
答案 2 :(得分:0)
select personID from T1 group by personID having count(distinct stuffID) in (select count(distinct stuffID) from T2)
select count(distinct stuffID) from T2
< - 将给出不同countID的总数
group by personID having count(distinct stuffID)
< - 按personId分组后,计算personId拥有的stuffId数。
因此两个计数应该等于得到所需的结果。
答案 3 :(得分:0)
使用count
是一种有效的方法。此外,从集合论的角度来看,你可以这样思考:对于有效的personID,我们不应该在T2中找到stuffID但是在T1中没有连接到这个personID。因此我们可以这样做:
SELECT DISTINCT T1.personID
FROM T1
WHERE NOT EXISTS (
SELECT T2.stuffID
FROM T2
WHERE T2.stuffID NOT IN (
SELECT DISTINCT T1copy.stuffID
FROM T1 T1copy
WHERE T1copy.personID=T1.personID));
答案 4 :(得分:-1)
试试这个
select personID from T1
group by personID
having count(distinct stuffID) >= (select count(*) from t2)