错误的SQL查询,需要从单个表

时间:2016-04-29 01:40:59

标签: mysql

在我的问题中,我有一个旅行路线表和一个城市表,路线表显示您的原始城市和您的目的地城市作为城市ID,城市ID的名称在另一张桌子上。

我想搜索从X市开始的所有路线,为此,我做了这个查询

    SELECT ciudad.nombre as Origen, 
ciudad.nombre as Destino, 
km as Distancia, 
rutas.km*rutas.precio_km as Precio, 
fecha as Fecha 
FROM rutas, ciudad where "Santiago"=ciudad.nombre and ciudad.id_ciudad=rutas.ciudad_or;

enter image description here

这是我得到的结果,请注意Origen = Destino

enter image description here

这是Routes表,ciudad_or和ciudad_de是来自城市的。

enter image description here

这是我的城市表

但它会在我的出发地和目的地打印同一个城市,我不知道如何让它显示正确的目的地(这也是一个Id)

我正在搜索城市名称

的路线

1 个答案:

答案 0 :(得分:1)

您需要为每个相应的城市表进行双重加入......

SELECT
      r.id_ruta,
      r.cuidad_or,
      Orig.nombre as Origen,
      r.cuidad_de,
      Dest.nombre as Destino,
      any_other_columns...
   from
      Routes r
         join ciudad as Orig
            ON r.ciudad_or = Orig.id_ciudad
         join ciudad as Dest
            ON r.cuidad_de = Dest.id_ciudad
   where
          orig.nombre="Santiago"
      OR  dest.nombre="Santiago"

现在,做一个OR寻找起源或目的地更好的方法是通过预先认证的联盟预算

我建议你的cuidad表上有两个索引。一个在cuidad_or上,另一个在cuidad_de上

SELECT
      r.id_ruta,
      r.cuidad_or,
      Orig.nombre as Origen,
      r.cuidad_de,
      Dest.nombre as Destino,
      any_other_columns...
   from
      Routes r
         join ciudad as Orig
            ON r.ciudad_or = Orig.id_ciudad
         join ciudad as Dest
            ON r.cuidad_de = Dest.id_ciudad
   where
      orig.nombre="Santiago"
UNION
SELECT
      r.id_ruta,
      r.cuidad_or,
      Orig.nombre as Origen,
      r.cuidad_de,
      Dest.nombre as Destino,
      any_other_columns...
   from
      Routes r
         join ciudad as Orig
            ON r.ciudad_or = Orig.id_ciudad
         join ciudad as Dest
            ON r.cuidad_de = Dest.id_ciudad
   where
      dest.nombre="Santiago"

联合将在单个索引上更好地工作,而不是将两者合二为一。哇...今晚手指不好用错误的列名,句号和间距......迟到了。