首页 > 解决方案 > 如何在 SQL 中排除内部查询的结果?

问题描述

我正在尝试排除 SQL 中的内部查询的结果(我目前正在使用 Google 的云平台),我有下表:

date       | name 
-----------+------------
2019-09-10 | gas_300x10
2019-09-10 | gas_250x10
2019-09-10 | gas_3x3
2019-09-11 | gas_300x10
2019-09-11 | gas_250x10
2019-09-11 | gas_4x4

我试图仅在 2019 年 9 月 10日排除名称等于gas_300x10 和 gas_250x10的值

我想保留该日期的其他值,也想保留gas_300x10 和 gas_250x10在其他日子发生的位置,例如 2019-09-11 日。

我有以下查询,它排除了我不想要的日期的值- 所以我不想要 2019-09-10 的这两个值:

SELECT * 
FROM my_table 
WHERE date = '2019-09-10' 
  AND (name = 'gas_300x10' OR name = 'gas_250x10') 

这个查询本质上会返回那些我不想要的值——我怎样才能将它嵌入到一个内部查询中,以便将这些结果从其余数据中排除?

我尝试使用EXCEPTandNOT IN作为子查询,但没有找到任何运气!

我认为代码会这样工作,但我不确定:

SELECT * 
FROM my_table 
EXCEPT
SELECT * 
FROM my_table 
WHERE date = '2019-09-10' 
  AND (name = 'gas_300x10' OR name = 'gas_250x10') 

标签: sqlgoogle-cloud-sql

解决方案


使用组合表达式:

select *
from mytable
where not (date = date '2019-09-10' and name in ('gas_300x10', 'gas_250x10'));

或者

select *
from mytable
where date <> date '2019-09-10' or name not in ('gas_300x10', 'gas_250x10');

推荐阅读