mysql - 子查询只能返回单列的声明

标签 mysql sql sql-server postgresql sqlite

我正在阅读 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/

相关文章:

mysql - 关于数据库表的设计

php - SQLSTATE[23000] : Integrity constraint violation: 1048 Column 'user_id' cannot be null error when assign forien key value?

mysql - 我怎样才能在where select中返回2行?

javascript - 如何使用 select AJAX 完成表单?

Mysql Group By 24小时间隔

php - MySQL错误: This command is not supported in the prepared statement protocol yet

sql - TSQL:将一行中所有字段的值合并为一个字符串

Mysql从多个表中获取数据

sql-server - 选择正确的 SQL Server 排序规则进行存储

c# - 如何在 C# 中以编程方式读取日志文件信息的 sql server mdf header