在我的问题中,我有一个旅行路线表和一个城市表,路线表显示您的原始城市和您的目的地城市作为城市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;
这是我得到的结果,请注意Origen = Destino
这是Routes表,ciudad_or和ciudad_de是来自城市的。
这是我的城市表
但它会在我的出发地和目的地打印同一个城市,我不知道如何让它显示正确的目的地(这也是一个Id)
我正在搜索城市名称
的路线答案 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"
联合将在单个索引上更好地工作,而不是将两者合二为一。哇...今晚手指不好用错误的列名,句号和间距......迟到了。