检查列是否包含另一列的所有值 - Mysql

Mar*_*rco 8 mysql sql relational-division

假设我有一个带有人员ID和其他东西ID的表T1,如下所示

Table: T1
personID | stuffID 
    1    |    1
    1    |    2
    1    |    3
    1    |    4
    2    |    1
    2    |    4
    3    |    1
    3    |    2
Run Code Online (Sandbox Code Playgroud)

另一个表T2只有一列stuffID

Table: T2
stuffID
   1  
   2  
   3  
Run Code Online (Sandbox Code Playgroud)

我得到的结果是,一个SELECT与所有T2的所有stuffID连接的peopleID表.

在该示例之后,结果将仅是id 1(即使所关联的所有stuffID都包含在T2.stuffID中,personID 3也不会出现).

Edd*_*ddy 6

如果我理解正确,您想从T1检索所有在T2中找到所有关联的stuffID的personID。

您可以按以下步骤进行分解:首先,找到与嵌套查询匹配的所有T1条目

SELECT personID 
FROM T1 WHERE stuffID IN (SELECT stuffID FROM t2)
Run Code Online (Sandbox Code Playgroud)

现在,您需要检查此集合中的哪些条目包含所需的所有stuffID

GROUP BY personID
HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM t2)
Run Code Online (Sandbox Code Playgroud)

并把它们放在一起:

SELECT personID 
FROM T1 WHERE stuffID IN (SELECT stuffID FROM t2)
GROUP BY personID
HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM t2)
Run Code Online (Sandbox Code Playgroud)

HTH。