sql - 理解“不存在”子句
问题描述
我很难理解如下 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 语句的权限,所以一切都是猜测。
解决方案
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)) ;
推荐阅读
- eclipse - 如何在 Eclipse 格式化程序中为二进制操作保留自定义缩进
- android - Flutter pageview 小部件更改屏幕参数并呈现它,但它不起作用
- c# - CartItems 在调试 c# 期间返回 0
- progressive-web-apps - PWA - Mailto 从缓存中排除?
- python-3.x - 网页从浏览器到 API 的显示方式不同
- python - 如何在树莓派中使用 pynput 结束循环?
- amazon-web-services - 没有创建标签
- vue.js - 如何使用道具和本地存储制作 vue3 暗模式?
- pandas - python3:熊猫按几列分组并将行值转换为多列
- ios - 在构建之前签署 iOS dylib