0

我在mysql中有下一个代码:

("SELECT id_viaje, 
       (SELECT nombre 
        FROM   unidades, 
               viaje 
        WHERE  id_unidad = id_unidades), 
       (SELECT nombre 
        FROM   empleados, 
               viaje 
        WHERE  id_empleado = id_conductor), 
       (SELECT nombre 
        FROM   empleados, 
               viaje 
        WHERE  id_empleado = id_guarda), 
       (SELECT nombre 
        FROM   ciudad, 
               viaje 
        WHERE  id_ciudad = id_salida), 
       (SELECT nombre 
        FROM   ciudad, 
               viaje 
        WHERE  id_ciudad = id_llegada), 
       fecha_salida, 
       fecha_llegada 
FROM   viaje; ")

我在每个结尾都尝试了 LIMIT 1,我用 IN 替换了 =,我不知道为什么会显示这个错误:

22:30:30    SELECT ID_Viaje, (select Nombre from unidades, viaje where ID_Unidad IN (ID_Unidades)) , (select Nombre from empleados, viaje where ID_Empleado IN (ID_Conductor)) ,(select Nombre from empleados, viaje where ID_Empleado IN (ID_Guarda)) , (select Nombre from ciudad, viaje where ID_Ciudad IN (ID_Salida)) , (select Nombre from ciudad, viaje where ID_Ciudad IN (ID_Llegada)) , Fecha_Salida, Fecha_Llegada FROM viaje limit 1    

Error Code: 1242 Subquery returns more than 1 row

请我很快需要帮助!

4

2 回答 2

0

当您的子查询应该返回单行时返回多行时,将返回此错误。

您的子查询逻辑完全错误。当您将子查询放在SELECT语句中时,您必须确保子查询将始终返回零或一行。

您现在可以做的是LEFT JOIN在查询中添加并使用一些别名,如下所示:

SELECT id_viaje, 
       u.nombre AS unidade_nombre,
       e_con.nombre AS conductor_nombre, 
       e_grd.nombre AS guarda_nombre, 
       c_salida.nombre AS salida_nombre,
       c_llegada.nombre AS llegada_nombre, 
       fecha_salida, 
       fecha_llegada 
FROM   viaje v
LEFT JOIN unidades u ON v.id_unidad = u.id_unidades
LEFT JOIN empleados e_con ON e.id_empleado = v.id_conductor
LEFT JOIN empleados e_grd ON e.id_empleado = v.id_guarda
LEFT JOIN ciudad c_salida ON e.id_salida = c_salida.id_ciudad
LEFT JOIN ciudad c_llegada ON e.id_llegada = c_llegada.id_ciudad
;

首先尝试在 MySQL Workbench 中运行它,并且只有当它在那里成功运行时,您才应该将它放入您的应用程序代码中。

另请注意,我的代码不应该在第一次尝试时运行。请在运行此代码之前进行任何适用的更正。

阅读有关MySQL 连接MySQL 子查询的更多信息

于 2013-04-20T06:06:28.437 回答
0

当子查询返回多行时,您需要使用in运算符。但是在您的情况下,子查询也是一个问题。请尝试使用 Rachcha 建议的内容

于 2013-04-20T06:08:32.463 回答