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行
如何解决?
答案 0 :(得分:1)
快速解决方法是添加另一个限制1.但如果没有更多信息,很难说它是否正确。
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
)
LIMIT 1
)
答案 1 :(得分:1)
你有两个子查询。
SELECT B.IDPRODUCTO
FROM ENVIOS B
GROUP BY B.IDPRODUCTO
ORDER BY COUNT(*) DESC
LIMIT 1
和
SELECT IDEMPLEADO FROM ENVIOS WHERE IDPRODUCTO = (
...
)
第一个有LIMIT 1
,以保证它只返回一次运行。另一个没有。简单的解决方法是添加LIMIT 1
。
SELECT IDEMPLEADO FROM ENVIOS WHERE IDPRODUCTO = (
...
) LIMIT 1
但是,您应首先检查此查询返回多行的原因。它似乎是根据产品ID从货件表中选择员工ID。如果它返回多个员工,LIMIT 1
将随机从该列表中选择一名员工。你可能不希望这样。
如果是多次返回相同的员工ID,您可以使用DISTINCT
将其减少到1。
SELECT DISTINCT IDEMPLEADO FROM ENVIOS WHERE IDPRODUCTO = (
...
)
如果它返回不同的员工ID,您必须质疑这是否是正确运行的查询。例如,第一个查询使用GROUP BY B.IDPRODUCTO ORDER BY COUNT(*) DESC LIMIT 1
按列表排序每个B.IDPRODUCTO
的次数,并返回最常见的那个。{{3}}。这也可能适合您的其他子查询。
答案 2 :(得分:0)
SELECT NOMBRE_E 'EMPLEADO'
FROM EMPLEADOS
WHERE IDEMPLEADO = (SELECT DISTINCT(IDEMPLEADO)
FROM ENVIOS
WHERE IDPRODUCTO = (SELECT B.IDPRODUCTO
FROM ENVIOS B
GROUP BY B.IDPRODUCTO ORDER BY COUNT(*) DESC LIMIT 1) );
在外部子查询中,如果是数字,则可能是distinct或MAX。希望这会有所帮助。
答案 3 :(得分:0)
我相信你可以通过使用IN或Exists子句而不是使用equals来解决这个问题。这将允许子查询返回多个结果
SELECT NOMBRE_E 'EMPLEADO'
FROM EMPLEADOS
where exists
(
SELECT IDEMPLEADO
FROM ENVIOS
WHERE IDPRODUCTO = (
SELECT B.IDPRODUCTO
FROM ENVIOS B
GROUP BY B.IDPRODUCTO
ORDER BY COUNT(*) DESC LIMIT 1
)
and ENVIOS.IDEMPLEADO = Empleados.IDEMPLEADO
);
或IN子句
SELECT NOMBRE_E 'EMPLEADO'
FROM EMPLEADOS
WHERE IDEMPLEADO in (
SELECT IDEMPLEADO
FROM ENVIOS
WHERE IDPRODUCTO = (
SELECT B.IDPRODUCTO
FROM ENVIOS B
GROUP BY B.IDPRODUCTO
ORDER BY COUNT(*) DESC LIMIT 1
)
)
答案 4 :(得分:0)
您的第一个子查询返回超过1行。
WHERE IDEMPLEADO = (
SELECT IDEMPLEADO FROM ENVIOS WHERE IDPRODUCTO = (
您可以使用'IN'代替'='
WHERE IDEMPLEADO IN (
SELECT IDEMPLEADO FROM ENVIOS WHERE IDPRODUCTO = (
然而,你最好检查为什么你得到多个值(1-n),无论你是想要使用全部还是选择限制1,或者你现在都有新问题:)