Mysql:从table2中选择一个表中的数据,table2中的值必须全部为0

时间:2016-06-23 10:26:07

标签: mysql

我希望能够选择t1 t1.active = 1 ID t2t2.active = 0

t1所有内容的所有内容

但是,如果ID中匹配的条目有{1}} t2中为t2.active = 1显示任何条目p>

示例:

Table 1
-----------
t1id|Active|
1 | 1 |  
2 | 1 | 



Table 2
-----------
t2id|Active|
1 | 0 |  
1 | 0 |  
1 | 1 |  
2 | 0 |  
2 | 0 |  

应该给出结果:

t1id|Active| 
2 | 1 | 

我试过了:

SELECT * FROM t1 WHERE t1.active = 1  
AND EXISTS(SELECT * FROM t2 WHERE t2.id = t1.id  
AND t2.active = 0  
GROUP BY t2.id, t2.active HAVING COUNT(t2.id) > 1 AND t2.active = 0)

不幸的是,这仍然会从t1返回条目,其中id存在于t2中并且有一个条目,其中active = 1

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

我看到两种解决方案。

1短,使用max

SELECT * 
FROM t1 
WHERE 
  t1.active = 1 AND 
  EXISTS(SELECT null 
         FROM t2 WHERE t2.id = t1.id
         GROUP BY t2.id 
        --if the max active = 0 then it means there's no t2.active = 1
        HAVING MAX(t2.active) =0)

代码中不那么优雅,但可能更清楚地解释你试图实现的目标

SELECT * FROM t1 
WHERE 
    t1.active = 1 AND
    EXISTS (    SELECT null FROM t2 
                WHERE t2.id = t1.id
                AND t2.active = 0) AND
    NOT EXISTS (SELECT null FROM t2 
                WHERE t2.id = t1.id
                AND t2.active = 1)

答案 1 :(得分:0)

为什么不尝试使用INNER JOIN?

查询必须是这样的:

select * 
from T1 a
LEFT JOIN T2 b 
ON a.ID = b.ID
and b.ACTIVE = (select max(active) from T2 group by ID)
where a.ACTIVE= 1
b.ACTIVE = 0