1

这是一个有效的查询:

select
(select 1),
(select 2),
(select 3);

然而,这不是:

select
(select 1),
(select 2, 3);

从数据库逻辑的角度来看,为什么不允许第二次查询?

鉴于查询结果将保证只包含一行,是否对第二个查询进行了修复以使其合法并返回与第一个查询相同(或相似)的结果?

澄清:

1,2 和 3 是实际查询的占位符,需要几秒钟才能运行。2 和 3 来自同一张表,如果我将它们分开,查询将花费两倍的时间来运行。如果可能的话,我想避免这种开销。

4

2 回答 2

1

问题是作为列的子查询必须是单值的。

相反,从子查询中选择单个列作为表:

select
(select 1),
2, 3
from (select 2, 3) t;
于 2013-09-02T00:40:39.703 回答
0

不知道真正的用例很难说,但你通常可以通过连接来做到这一点:

SELECT t1.f1, t2.f2, t2.f3 FROM
(SELECT 1 AS f1) AS t1,
(SELECT 2 AS f2, 3 AS f3) AS t2

http://sqlize.com/9l0h8pcZKJ

于 2013-09-02T00:29:49.110 回答