这是一个有效的查询:
select
(select 1),
(select 2),
(select 3);
但是,这不是:
select
(select 1),
(select 2, 3);
从DB逻辑的角度来看,为什么不允许第二次查询?
第二个查询是否有修复使其合法并返回与第一个查询相同(或类似)的结果,因为查询结果将保证只包含一行?
澄清:
1,2和3是实际查询的占位符,需要很长时间才能运行。 2和3来自同一个表,如果我将它们分开,查询将花费两倍的时间来运行。如果可能的话,我想避免这种开销。
答案 0 :(得分:1)
问题是子查询作为列必须是单值的。
而是从子查询中选择单个列作为表:
select
(select 1),
2, 3
from (select 2, 3) t;
答案 1 :(得分:0)
在不知道真实用例的情况下很难说,但通常可以通过连接来实现:
SELECT t1.f1, t2.f2, t2.f3 FROM
(SELECT 1 AS f1) AS t1,
(SELECT 2 AS f2, 3 AS f3) AS t2