Mysql:选择与多行上的多个条件匹配的值

时间:2016-09-22 18:37:17

标签: mysql join

晚上好,

我有两个表t1和t2

在t1中,我有两个变量,ID(唯一标识每一行)和DOC(可以是多个ID共有)

在t2中,我有三个变量,ID(这里不一定唯一地标识行),AUTH和TYPE。每个ID最多有1个不同的AUTH。

示例数据:

我想要做的是选择ID为AUTH ='EP'且具有AUTH ='US'的ID的DOC。他们可以使用其他AUTH获得额外的ID,但他们必须至少拥有这两个ID。

因此,我将有一个带有DOC,ID和AUTH的最终表格(每个文档应该至少有2个ID,但如果对此DOC存在额外的AUTH和EP,则可能更多<) / p>

期望的结果:

2 个答案:

答案 0 :(得分:1)

这应该有效:

SELECT DISTINCT (T1.ID), T1.DOC, T2.AUTH FROM T1 
LEFT JOIN T2 ON T2.ID = T1.ID 
WHERE T1.DOC IN( SELECT T1.DOC FROM T2 
               LEFT JOIN T1 ON T1.ID = T2.ID  
               WHERE T2.AUTH IN('EP','US') 
               GROUP BY T1.DOC HAVING COUNT(DISTINCT T2.AUTH) = 2) ;

答案 1 :(得分:0)

如果我能正确理解,那么查询就是这样的:

select t1.doc, t1.id, t2.auth from t1
left join t2 on t2.id = t1.id
where t1.doc in( select t1.doc from t2
                 left join t1 on t1.id = t2.id
                 where t2.auth in('EP','US') );

尽管如此,结果集基本上将成为第一个样本数据表,因为 ID 6 具有 AUTH =“EP”,因此, ID 7 ID 6 具有相同的 DOC