gpt4 book ai didi

mysql - 错误: #1242 - Subquery returns more than 1 row in the query - MYSQL

转载 作者:行者123 更新时间:2023-11-29 06:33:45 26 4
gpt4 key购买 nike

下面是返回子查询的 MySQL 代码。我希望子查询只返回一行。

SELECT DISTINCT w.cname
FROM works w
WHERE
(SELECT DISTINCT w.cname, AVG(w.salary)
FROM works w
WHERE 1
GROUP BY w.cname
)

<

(SELECT DISTINCT w.cname,AVG(w.salary)
FROM works w
WHERE 1
GROUP BY w.cname
)

MySQL 错误说:

1242 - 子查询返回多于 1 行

最佳答案

首先,字面上的答案:如果用作表达式的子查询返回多于一行,请对其进行修改,使其最多返回一行。

我大胆猜测一下,你想找到收入低于平均工资的 worker 。解决方案是:

SELECT -- add DISTINCT if needed
w.cname
FROM
works w
WHERE
w.salary < (SELECT AVG(w2.salary) FROM works w2)

请注意,此处的子查询 (SELECT AVG(w2.salary) FROM Works w2) 将始终返回单个值,因为没有 GROUP BY 子句。 (另外,由于 works 表的这个实例与另一个表没有任何关系,因为您从中得到了完全不相关的东西,所以这是一个很好的做法(并且某些 DBMS 或其他 DBMS 需要这样做)使用不同的表别名 - 因此 w2。)

请注意,由于您可以在子查询中引用原始表,因此您可以使用外部查询的 FROM 子句中的数据来过滤子查询。例如,如果您想返回收入低于他们自己平均工资的人员的每个实例:

SELECT DISTINCT
w.cname, w.salary
FROM
works w
WHERE
w.salary < (SELECT AVG(w2.salary) FROM works w2 WHERE w2.cname = w.cname)

请注意不同的表别名(ww2)在这里有何影响。此外,此子查询仍然只返回一行,因为按名称过滤器位于 WHERE 子句中 - 它返回与该特定名称匹配的所有工资行的平均值,而不是按姓名分组的所有工资行的平均值。前者是一个值(对于一个特定的人),后者是每个人的一个值(因此是一个错误)。

关于mysql - 错误: #1242 - Subquery returns more than 1 row in the query - MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com