【问题标题】:Why should operand contain only one column?为什么操作数应该只包含一列?
【发布时间】:2013-09-05 00:43:22
【问题描述】:

这是一个有效的查询:

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

但是,这不是:

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

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

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

澄清一下:

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

【问题讨论】:

  • @MostyMostacho 谢谢,123 是非常复杂的实际查询的占位符,我想避免重复查询 N 次的额外开销。
  • 如果查询速度很慢,请考虑在此处发布它们以帮助优化它们。我们只能猜测它们的内容可能是什么。
  • @MichaelBerkowski 我很感激。我正在寻找一个通用的解决方案。
  • 我同意迈克尔的观点。或者至少发布您期望的输出,以便更好地了解您正在尝试做什么。

标签: mysql sql database


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

    • 那是完美的。 t3.f3 有一个小错字。
    • 已修复。我不敢相信我犯了这个错误,却没有注意到它在 SQLize 中不起作用......
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多