繁体   English   中英

WHERE 子句中的 SQL 过滤结果集

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM