Sql语法:select without from子句作为select中的子查询(subselect)

2024-04-21

在编辑一些查询以添加没有值的列的替代项时,我不小心写了这样的内容(这是简单的版本):

SELECT id, (SELECT name) FROM t

令我惊讶的是,MySQL 没有抛出任何错误,而是完成了查询,给出了我预期的结果(name列值)。 我试图找到有关它的任何文档,但没有成功。

这是 SQL 标准还是 MySQL 的特色?
我能否确定此语法的结果确实是同一(外部)表中的列值?扩展版本将是这样的:

SELECT id, (SELECT name FROM t AS t1 where t1.id=t2.id) FROM t AS t2

but the EXPLAIN报告No tables used in the Extra以前版本的专栏,我认为非常好。

这是一个简单的在 SqlFiddle 上摆弄 http://sqlfiddle.com/#!6/cf948/3(它总是超时,我希望你有更好的运气)。

澄清:我了解子查询,但我总是编写暗示要从中选择的表的子查询(相关或不相关),从而导致执行计划中出现额外的步骤;我的问题是关于这个语法及其给出的结果,在 MySQL 中似乎返回了预期值,没有任何结果。


第一个查询中的内容是一个相关子查询,它只返回name表中的列t。此处不需要运行实际的子查询(这是您的 EXPLAIN 告诉您的)。

在 SQL 数据库查询中,相关子查询(也称为 同步子查询)是一个子查询(嵌套在另一个查询中的查询) 查询)使用外部查询中的值。

https://en.wikipedia.org/wiki/Corlated_subquery https://en.wikipedia.org/wiki/Correlated_subquery

SELECT id, (SELECT name) FROM t

是相同的

SELECT id, (SELECT t.name) FROM t

您的第二个查询

SELECT id, (SELECT name FROM t AS t1 where t1.id=t2.id) FROM t AS t2

还包含相关子查询,但这实际上是在表 t 上运行查询以查找 t1.id = t2.id 的记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sql语法:select without from子句作为select中的子查询(subselect) 的相关文章

随机推荐