首页 > 解决方案 > 理解“不存在”子句

问题描述

我很难理解如下 SQL 语句(SQL Server 方言):

select 
  id, 
  book, 
  '11W', -- acnt type
  '000', -- prod code
  '0'   -- acnt category
from XYZ_TABLE x
where NOT EXISTS (select 1 from XYZ_TABLE where [acnt type] = '11w' and [prod code] = '000' and [acnt category] = '0' and id = x.id and book = x.book)

我查看了这个论坛的语义,NOT EXISTS并且Select 1 ...有点想法,但我在这里仍然在努力理解上面试图实现的目标,最令人费解的是所有比较中只涉及一个表。

顺便说一句,我没有运行 SQL 语句的权限,所以一切都是猜测。

标签: sqlsql-server

解决方案


SQL Server 文档提供了非常容易理解的解释:

NOT EXISTS 的作用与 EXISTS 相反。如果子查询没有返回任何行,则满足 NOT EXISTS 中的 WHERE 子句。以下示例在 DimCustomer 表中查找 LastName 和 BirthDate 与 ProspectiveBuyers 表中的任何条目都不匹配的行。SQL

SELECT a.LastName, a.BirthDate  
FROM DimCustomer AS a  
WHERE NOT EXISTS  
(SELECT *   
    FROM dbo.ProspectiveBuyer AS b  
    WHERE (a.LastName = b.LastName) AND (a.BirthDate = b.BirthDate)) ;  

推荐阅读