sql - 使用 EXCEPT,其中 1=0
问题描述
我看到了以下关于删除条目的基本方法的帖子,但没有解释它是如何工作的。我看到它可以工作,但我想知道它的工作原理以及它的评估过程。下面我将发布代码,以及我的想法。我希望有人能告诉我,我关于如何逐步评估它的思考过程是否正确,或者如果我离开了,有人可以帮我分解一下。
CREATE TABLE #DuplicateRcordTable (Col1 INT, Col2 INT)
INSERT INTO #DuplicateRcordTable
SELECT 1, 1
UNION ALL
SELECT 1, 1
UNION ALL
SELECT 1, 1
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4
GO
这将返回一个基本表:
然后此代码用于排除重复项:
SELECT col1,col2
FROM #DuplicateRcordTable
EXCEPT
SELECT col1,col2
FROM #DuplicateRcordTable WHERE 1=0
我的理解是 1=0 创建一个结构相同但没有数据的“临时”表。
然后这段代码是否开始向新的空表添加数据?
例如,它是否查看第一个 Col1、Col2 对 1,1 并说“我在表中看不到它”,因此它将其添加到“临时”表和最终结果中,然后检查下一行是也是 1,1,然后已经在“临时”表中看到它,因此它没有添加到最终结果中......等等通过数据。
解决方案
EXCEPT
是一个删除重复项的集合操作。也就是说,它会获取第一个表中不存在于第二个表中的所有内容,然后进行重复删除。
如果第二组为空,则剩下的就是重复删除。
因此,
SELECT col1, col2
FROM #DuplicateRcordTable
EXCEPT
SELECT col1, col2
FROM #DuplicateRcordTable
WHERE 1 = 0;
相当于:
SELECT DISTINCT col1, col2
FROM #DuplicateRcordTable
这将是编写查询的更典型方式。
这也相当于:
SELECT col1,col2
FROM #DuplicateRcordTable
UNION
SELECT col1,col2
FROM #DuplicateRcordTable
WHERE 1 = 0;
推荐阅读
- html - 由于不允许的 MIME 类型(“text/html”)而被阻止
- php - QuestDB SELECT 返回特殊字符,但 Postgres 不
- python - pandas.DataFrame.value_counts :如何根据单独的列表对结果进行排序?
- python - 传递到下一个函数时回溯未满
- c# - 如何将 Azure Application Insights for Asp.Net Core 5.0 配置为仅发送 4% 的请求和 100% 的异常?
- visual-studio-code - VS Code ESLint 检查快速修复...不工作
- kotlin - 如何在 Kotlin 中创建静态函数而不创建对象
- node.js - Mongoose 因 $in 失败:[数字数组]
- nginx - 在 NGINX 中解析 HTTP 基本授权标头
- python - 在 Python 上使用 BeautifulSoup 的 Webscraper