MySQL嵌套查询执行

时间:2010-08-08 14:45:58

标签: mysql sql nested execution

我正在编写一个嵌套的MySQL查询,其中子查询返回多行,因此无法执行查询。

有人能建议我解决这个问题吗?

提前致谢。

6 个答案:

答案 0 :(得分:5)

关于返回多个值的子查询的错误告诉我您正在尝试进行直接值比较,如下所示:

WHERE col = (SELECT col2 FROM TABLE_2)

解决方案取决于来自子查询的数据 - 您是否希望查询使用返回的所有值?如果是,则更改IN的等号:

WHERE col IN (SELECT col2 FROM TABLE_2)

否则,您需要更正子查询,以便它只返回一个值。 MAX或MIN聚合函数是可能的 - 它们将返回最高或最低值。它可能只是关联子查询的问题:

  FROM TABLE_1 t1
WHERE t1.col = (SELECT MAX(t2.col2)
                           FROM TABLE_2 t2
                         WHERE t2.fk_col = t1.id)  -- correlated example

正如Tabhaza所指出的,子查询通常不会返回多个列(尽管某些数据库支持元组匹配),在这种情况下,您需要定义派生表/内联视图并加入它。

如果您有关于此问题的更多信息,我们会很高兴......

答案 1 :(得分:2)

尝试加入派生表而不是执行子查询;它将允许您返回多个字段:

SELECT a.Field1, a.Field2, b.Field3, b.Field4
FROM table1 a INNER JOIN 
  (SELECT c.Field3, c.Field4, c.Key FROM table2 as c) as b ON a.Key = b.Key
WHERE ...

答案 2 :(得分:1)

这听起来像是一个逻辑问题,而不是语法问题。

为什么子查询返回多行?

为什么你在一个只需要一行的地方呢?

你需要重组一些东西以适应这两件事。如果没有任何关于您的系统,您的查询或您的意图的指示,则很难进一步提供帮助。

答案 3 :(得分:1)

如果数据库显示您要返回多行,则应该听取它说的内容并更改查询,以便它只返回一行。

这是你逻辑上的一个问题。

更改查询,使其只返回一行。

考虑为什么查询返回多行,并确定如何让查询返回该结果所需的单行。

答案 4 :(得分:0)

在子查询上使用LIMIT子句,因此它总是返回最多1行

答案 5 :(得分:0)

您可以向子查询添加LIMIT 1,以便顶部查询仅考虑第一个结果。您还可以在执行LIMIT之前对子查询中的结果进行排序,以返回具有最高/最低X的结果。但请确保这实际上是您想要发生的结果,因为多行子查询通常是底层的症状问题