Mysql 为什么操作数只包含一列?

Mysql 为什么操作数只包含一列?,mysql,sql,database,Mysql,Sql,Database,这是一个有效的查询: select (select 1), (select 2), (select 3); 然而,这不是: select (select 1), (select 2, 3); 从DB logics的角度来看,为什么不允许第二次查询 如果保证查询结果只包含一行,是否对第二个查询进行了修复,使其合法并返回与第一个查询相同(或类似)的结果 澄清: 1、2和3是实际查询的占位符,这些查询需要几秒钟才能运行。2和3来自同一个表,如果我将它们分开,查询将运行两倍的时间。如果可能的话,我希

这是一个有效的查询:

select
(select 1),
(select 2),
(select 3);
然而,这不是:

select
(select 1),
(select 2, 3);
从DB logics的角度来看,为什么不允许第二次查询

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

澄清:


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

在不了解实际用例的情况下很难判断,但通常可以通过连接来实现:

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

如果不知道真正的用例,很难判断,但您通常可以通过连接:

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

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

而是从子查询中选择各个列作为表:

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

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

而是从子查询中选择各个列作为表:

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

MostyMostacho谢谢,123是非常复杂的实际查询的占位符,我希望避免重复查询N次的额外开销。如果查询速度慢,请考虑将它们张贴在这里以帮助优化它们。我们只能猜测它们的内容。@MichaelBerkowski我很感激。我在寻找一个通用的解决方案。我同意迈克尔的观点。或者至少输出你期望得到的输出来更好地理解你想要做的事情。@ MostyMostacho谢谢,123是非常复杂的实际查询的占位符,我希望避免重复N次查询的额外开销。如果查询速度慢,请考虑将它们张贴在这里以帮助优化它们。我们只能猜测它们的内容。@MichaelBerkowski我很感激。我在寻找一个通用的解决方案。我同意迈克尔的观点。或者至少发布你期望得到的输出,以便更好地理解你想要做的事情。这太完美了。
t3.f3中有一个小错误。修复了。我不敢相信我犯了那个错误,并且没有注意到它在SQLize中不起作用……这太完美了。
t3.f3中有一个小错误。修复了。我不敢相信我犯了那个错误,并且没有注意到它在SQLize中不起作用。。。