sql - EXISTS 子句在 SQL Server 中如何工作?

标签 sql sql-server

我尝试了以下查询,但对 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

LiveDemo

编辑:

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/

相关文章:

sql - SUM GROUP BY 给出不想要的结果

sql-server - SQL Server-为什么在创建索引时我的SPID是 "SUSPENDED"但未被阻止?

SQL Server 分区 - 唯一索引错误

sql - 根据其他行排除行 (SQL)

mysql - 在nodejs中编写多个sql查询

mysql - 从具有相同结构的多个表中选择 SQL

SQL Postgres - 插入到不存在的地方

sql - Azure SQL - 空间性能问题

php - 如何自动将数据从一台SQL服务器导出到Mysql表

mysql - 单表中的简单选择查询