WHERE EXISTS子查询中列是否重要?
问题描述
在本次教程中,SQL EXISTS运算符具有以下语法:
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
子查询中select语句中的column_name是否重要?从其他答案看来,似乎已经使用了0、1、*或者一些任意的列名。
解决方案
从子查询表达式文档中的EXISTS
部分可以看出:
子查询通常只会执行一段时间,以确定是否返回至少一行,而不会一直执行到结束。
由于结果只取决于是否返回任何行,而不是这些行的内容,因此子查询的输出列表通常不重要。
不仅如此,从9.4版本开始,它甚至不需要存在:
允许SELECT
拥有一个空的目标列表(Tom Lane)
示例:
CREATE TABLE table_name AS SELECT 'hello' AS "column_name",
true AS "condition" ;
SELECT column_name
FROM table_name
WHERE EXISTS (SELECT FROM table_name WHERE condition);
column_name
---
hello