【问题标题】:Is it possible for a subquery to return two values?子查询是否可以返回两个值?
【发布时间】:2011-05-28 00:38:15
【问题描述】:

子查询是否可以将两个值返回到外部查询? 如:

SELECT 1, 
       (SELECT COUNT(*), MAX(*) FROM test_table WHERE test=123) 
FROM another_table

或者有更好的方法吗?

【问题讨论】:

  • 如果 Another_Table 有 20 行,您将获得 20 行包含相同数据的输出,除非列 test 仅存在于 Another_Table 中而不存在于 Test_Table 中(在这种情况下,它是写限制的有趣方式(这是“减数分裂”的一个相当极端的例子)。

标签: sql mysql subquery mysql-error-1241


【解决方案1】:

嗯,这取决于您到底想对数据做什么,您可以使用JOIN 语法连接两个表,其中一个表实际上可以是子查询。我想这可能就是你想要的。

我什至不知道你当前的查询会做什么..

文档: http://dev.mysql.com/doc/refman/5.0/en/join.html

【讨论】:

    【解决方案2】:

    如果您在FROM 子句中使用子查询而不是字段列表,那么您可以将输出视为表并引用单独的列。

    【讨论】:

    • 我对此有点困惑。请您再解释一下好吗?
    • SELECT A.a, A.b FROM (SELECT a, b FROM MyTable) AS A;
    • @kevin 您的子查询,可以作为带有别名的FROM 子句中的附加表(例如AS test_t,也为子查询中的字段命名),并参考中的值字段列表:SELECT 1, test_t.count, test_t.max FROM (SELECT ...
    • 这里唯一的问题是,如果没有加入标准,这个建议将产生一个笛卡尔积。
    • @OMG Ponies:非常正确,它需要限制。如果查询是不相交的,那么作为字段列表中的两个子查询可能会更好。 OP 只询问“子查询是否有可能将两个值返回到外部查询” - 回答,是的。未考虑适用性。
    【解决方案3】:

    不可能

    mysql> select 1, (select 2, 3) from dual;
    ERROR 1241 (21000): Operand should contain 1 column(s)
    

    如果你正在处理两个表并且你在一行中得到什么结果,你应该执行一个连接。

    【讨论】:

      【解决方案4】:

      你只是选择数字作为结果,所以你不能这样做:

      SELECT 1, COUNT(*), MAX(*) FROM test_table WHERE test=123
      

      【讨论】:

      • 它们是两个不同的表:\
      猜你喜欢
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      相关资源
      最近更新 更多