[英]SQL Filter Resultset in WHERE clause
结果集过滤器有问题。
我的 SQL 查询给出了一个如下所示的列表:
LOAD_NR -------- REASON_ID
399 19
399 20
399 21
399 22
400 19
400 20
401 20
402 20
现在我想要一个负载编号列表,例如 Reason_ID = 19 AND Reason_ID = 20。在这个例子中,这将是:399 和 400。
我正在使用 Firebird 数据库。
试试这个:
SELECT LOAD_NR
FROM mytable
WHERE REASON_ID IN (19, 20)
GROUP BY LOAD_NR
HAVING COUNT(DISTINCT REASON_ID) = 2
您需要选择满足两个条件的所有值,因此您需要单独检查是否存在:
select distinct load_nr
from thetable a
where exists (select 1 from thetable where load_nr = a.load_nr and reason_id = 19)
and exists (select 1 from thetable where load_nr = a.load_nr and reason_id = 20)
或者,您可以使用ANY
(或SOME
) ,但这可能会导致性能更差:
select distinct load_nr
from thetable a
where 19 = any (select reason_id from thetable where load_nr = a.load_nr)
and 20 = any (select reason_id from thetable where load_nr = a.load_nr)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.