SELECT NOMBRE_E 'EMPLEADO'
FROM EMPLEADOS
WHERE IDEMPLEADO = (
SELECT IDEMPLEADO FROM ENVIOS WHERE IDPRODUCTO = (
SELECT B.IDPRODUCTO
FROM ENVIOS B
GROUP BY B.IDPRODUCTO
ORDER BY COUNT(*) DESC
LIMIT 1
)
)
错误:子查询返回超过1行
如何修复?
5条答案
按热度按时间z9zf31ra1#
您有两个子查询。
和
第一个有一个
LIMIT 1
以保证它只返回一次运行。另一个没有。简单的解决方法是添加LIMIT 1
.但是,您应该首先检查此查询返回多行的原因。它似乎是根据产品id从发货表中选择员工id。如果它返回多个员工,则
LIMIT 1
将从该列表中随机挑选一名员工。你可能不想那样。如果它多次返回相同的雇员id,那么可以使用
DISTINCT
把它减少到1。如果它返回的是不同的雇员id,那么您必须怀疑这是否是要运行的正确查询。例如,第一个查询使用
GROUP BY B.IDPRODUCTO ORDER BY COUNT(*) DESC LIMIT 1
按每次的次数对列表排序B.IDPRODUCTO
是被看见的,并且返回看见最多的那一个。这可能也适用于其他子查询。0lvr5msh2#
第一个子查询返回的行数超过1行。
你可以用“in”代替“=”
不过,最好检查一下为什么会得到多个值(1-n),是要使用all还是选择limit 1,或者现在有新问题:)
apeeds0o3#
在外部子查询中,如果是数字,则可能是distinct或max。希望这有帮助。
6ioyuze24#
我相信您可以通过使用in或exists子句而不是使用equals来解决这个问题。这将允许子查询返回多个结果
或in子句
z2acfund5#
一个快速解决办法是增加另一个限制1。但如果没有更多的信息,很难说它是否正确。