我尝试了以下查询,但对 EXISTS
子句的工作有点困惑,尽管我知道它的计算结果为 TRUE/FALSE
。
下面#1 SQL子查询无论如何返回0,但组合查询的结果仍然是1。
1. SELECT 1 WHERE EXISTS ( SELECT 0 WHERE 1 = 1 )
2. SELECT 1 WHERE EXISTS ( SELECT 0 WHERE 1 = 0 )
此外,如果 EXISTS
子句的计算结果为 TRUE/FALSE
,那么为什么下面的子句不起作用?
SELECT 1 WHERE EXISTS ( 1 )
请帮助我了解这种情况。
编辑: EXISTS
子句评估TRUE/FALSE
。
如果子查询返回任何结果,则条件为 TRUE
。那么为什么EXISTS(1)
不起作用呢?这是一个TRUE
条件。
最佳答案
来自文档 EXISTS :
Specifies a subquery to test for the existence of rows.
SELECT 1
WHERE EXISTS ( SELECT 0 WHERE 1 = 1 )
-- there is row
SELECT 1
WHERE EXISTS ( SELECT 0 WHERE 1 = 0 )
-- no row returned by subquery
SELECT 1 WHERE EXISTS ( 1 )
-- not even valid query `1` is not subquery
请记住,它检查的是行而不是值:
SELECT 1
WHERE EXISTS ( SELECT NULL WHERE 1 = 1 )
-- will return 1
编辑:
This seems contradictory with the sentence " EXISTS clause evaluates for TRUE/FALSE" ?
EXISTS
运算符测试行是否存在,并返回 TRUE/FALSE
。
因此,如果子查询返回:
╔══════════╗ ╔══════════╗ ╔══════════╗ ╔══════════╗
║ subquery ║ ║ subquery ║ ║ subquery ║ ║ subquery ║
╠══════════╣ ╠══════════╣ ╠══════════╣ ╠══════════╣
║ NULL ║ ║ 1 ║ ║ 0 ║ ║anything ║
╚══════════╝ ╚══════════╝ ╚══════════╝ ╚══════════╝
然后EXISTS(子查询)
-> TRUE
。
如果子查询返回(没有行):
╔══════════╗
║ subquery ║
╚══════════╝
然后EXISTS(子查询)
-> FALSE
。
关于sql - EXISTS 子句在 SQL Server 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081486/