我正在阅读 Ben Fortas 的“在 10 分钟内自学 SQL”这本书,它有灰框警告:“子查询 SELECT 语句只能检索单个列。尝试返回多个列将返回错误。”
事实上,对于 RDMS 来说,这是否普遍适用? (请注意,如果 this answer 正确,则并非所有数据库都正确)。
为什么它会是真的?这似乎是一个奇怪的语言限制。查询的计算成本很高,检索 3 列的工作与检索 1 列的工作在计算上并没有特别不同(除非您的 RDMS 存储您的表是按列分组而不是按行分组)。
最佳答案
在您链接到的答案中,我会将其归类为“内联 View ”或“内联查询”,而不是子查询。
当然,这就提出了子查询究竟是什么的问题。
这是一个您确实只能返回单个列的示例。
select (select name from table where id = main_query.id),
id
from table main_query
这是一个示例,您可以在其中返回多列。这似乎是明确的“相关”类型的子查询。
select id
from table main_query
where (col1, col2) in (select a,b
from c
where c.x = main_query.y);
这是一个示例,其中返回多少列并不重要,实际上任何值都将被忽略:
select id
from table main_query
where exists (select a,b
from c
where c.x = main_query.y);
我认为总的来说我会说这不是真的,但这取决于您对子查询的定义。
关于mysql - 子查询只能返回单列的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621987/