如果我需要选择数据"EXCEPT"其他一些数据,我应该采用什么方法?

pen*_*ake 1 sql t-sql filtering where-clause

如果我需要选择一个数据来覆盖其他一些数据,我应该采用什么方法来构建我的SQL查询?

例如,我的

我想要从数据库中选择所有数据除了这个结果集:

SELECT *
FROM table1
WHERE table1.MarketTYpe = 'EmergingMarkets'
AND IsBigOne = 1
AND MarketVolume = 'MIDDLE'
AND SomeClass = 'ThirdClass'
Run Code Online (Sandbox Code Playgroud)

我应该用吗?

  • NOT IN(aboe结果集)
  • 或者shoudl我得到条件的反转!= = = inseat =等.
  • 要么 ?

你能建议吗?

gbn*_*gbn 6

使用EXCEPT构造?

SELECT *
FROM table1
EXCEPT
SELECT *
FROM table1
WHERE table1.MarketTYpe = 'EmergingMarkets'
AND IsBigOne = 1
AND MarketVolume = 'MIDDLE'
AND SomeClass = 'ThirdClass'
Run Code Online (Sandbox Code Playgroud)

请注意,EXCEPTNOT EXISTS使用"left anti semi join"提供相同的查询计划.

NOT IN (subquery with above)如果子查询中有NULL值,则可能无法给出正确的结果,因此我不会使用

我会避免WHERE子句中的否定因为它不能立即读取
因为评论显示迈克尔的答案......

有关"除某些行之外的所有行"的更多信息,请参阅以下内容: