sql - SQL 查询 - 获取具有空值的记录(但确保它们没有任何其他记录与键与值匹配)
问题描述
所以我正在编写一个查询,我需要获取一个表中的所有记录,这些记录具有两个字段的 null 或 '' 值......
文件和邮政编码。
我的问题是我有重复的记录,到目前为止我写的所有查询都会返回一个带有 null 或 '' 文件和邮政编码字段的记录,但是其中一个重复项(基于电子邮件字段)确实有一个文件/邮政编码值。
我只需要获取所有实例都具有空文件/邮政编码值的那些记录
SELECT DISTINCT EMAIL FROM Results R
WHERE
( ISNULL(R.Postcode, '') = ''
AND
ISNULL(R.File, '') = ''
)
AND NOT EXISTS (
SELECT Id FROM Results RR
WHERE RR.Email = R.Email
AND (
ISNULL(R.Postcode, '') <> ''
AND
ISNULL(R.File, '') <> ''
)
)
ORDER BY R.Email
解决方案
这里有点盲目,但我怀疑带有条件聚合的HAVING
子句可以解决这个问题:
SELECT Email
FROM Results
GROUP BY Email
HAVING COUNT(CASE WHEN Postcode IS NOT NULL AND Postcode != '' THEN 1 END) = 0
AND COUNT(CASE WHEN [File] IS NOT NULL AND [File] != '' THEN 1 END) = 0;
另请注意,我没有在逻辑中使用ISNULL
(或COALESCE
),而是使用布尔逻辑。这实际上很重要,因为ISNULL
在您的查询中包含诸如包裹在列周围的功能WHERE
会导致查询不可搜索;这意味着您的表上的索引不能用于帮助数据引擎过滤到正确的行,而是必须对数据执行全面扫描。
推荐阅读
- rss - 我们可以从 2sxc 新闻应用程序创建一个 RSS 源吗?
- angular - 下拉列表中的完整值未出现在 Angular 的 mat-option 中
- ethereum - getTransaction 与 getTransactionReceipt
- android - DatePicker 对话框:标题背景
- python - 如何使用grouby调整熊猫中的小计列?
- python - 在 python 中使用列和行读取 Txt 文件
- python - 迭代地在一本字典中附加字典?
- c# - 使用不同的身份验证方案
- python - 熊猫数据框列出每行都有一些值的列
- javascript - 使用节点时如何修复 eslint 错误:导入 Node.js 内置模块时的协议