我偶然发现了Postgres的行为,我不明白。我输入这个简单的查询。请注意,SELECT
子句中没有表达式:
SELECT FROM (VALUES (1), (2), (3)) AS data(value);
服务器回复
Query executed OK, 3 rows affected.
根据SELECT
语句的文档,空子句似乎完全有效,但我不明白 * 受影响的行 * 在这种情况下是什么意思。EXPLAIN
给了我简单的“值扫描”查询计划。当我将SELECT
更改为SELECT *
时,查询按预期工作并返回三行表。SELECT <nothing> FROM ...
是什么意思Postgres版本是9.5。
1条答案
按热度按时间0x6upsns1#
PostgreSQL允许空的
SELECT
列表(SQL标准不允许)。“3 rows affected”一定是您的客户端在收到包含三行的结果集时所说的话。结果集 * 确实 * 包含三行,即使它们不包含列。也许您的客户端显示结果集时将其视为空,但实际上并非如此。