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、サブクエリが常に 0 行または 1 行を返すことを確認する必要があります。

今できることは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 に答える