我希望能够选择t1
t1.active = 1
ID
t2
和t2.active = 0
t1
所有内容的所有内容
但是,如果ID
中匹配的条目有{1}} 1 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
任何帮助将不胜感激!
答案 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