簡體   English   中英

錯誤的SQL查詢,需要從單個表中搜索兩個名稱

[英]Wrong SQL Query, need to search two names from a single table

在我的問題中,我有一個旅行路線表和一個城市表,路線表將您的出發城市和目的地城市顯示為城市ID,而城市ID的名稱在另一個表中。

我想搜索所有從X city出發的路線,為此,我進行了此查詢

    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;

在此處輸入圖片說明

這是我得到的結果,請注意Origen = Destino

在此處輸入圖片說明

這是路線表,ciudad_or和ciudad_de是往返城市。

在此處輸入圖片說明

這是我的城市表

但是它將在我的出發地和目的地上打印相同的城市,我不知道如何使它顯示正確的目的地(這也是一個ID)

我正在搜索帶有城市名稱的路線

您需要對每個城市的城市表進行兩次聯接...

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"

現在,進行“或”尋找起點或目的地的更好方法是通過對諸如

我建議您在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"

與嘗試將兩個索引合並為一個索引相比,聯合將在單個索引上更好地工作。 哇...今晚用手指弄壞了錯誤的列名,句號和空格...太晚了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM