我尝试了以下查询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:
指定一个子查询以测试是否存在行。
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
编辑:
这似乎与“ EXISTS子句的评估结果为TRUE / FALSE”这句话相矛盾?
EXISTS
操作员测试是否存在行,然后返回TRUE/FALSE
。
因此,如果子查询返回:
╔══════════╗ ╔══════════╗ ╔══════════╗ ╔══════════╗
║ subquery ║ ║ subquery ║ ║ subquery ║ ║ subquery ║
╠══════════╣ ╠══════════╣ ╠══════════╣ ╠══════════╣
║ NULL ║ ║ 1 ║ ║ 0 ║ ║anything ║
╚══════════╝ ╚══════════╝ ╚══════════╝ ╚══════════╝
然后EXISTS (subquery)
-> TRUE
。
如果子查询返回(无行):
╔══════════╗
║ subquery ║
╚══════════╝
然后EXISTS (subquery)
-> FALSE
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句