Mysql连接两个表,左侧是不同的行,右侧是同一行

时间:2012-01-14 14:38:06

标签: mysql left-join

我有两张这样的表:

table1_ride
--------
id                 ride id
from_which_city    city id
to_city            city id

table2_city
--------
id                 city id
name               city name

我想要的是当我提交查询SELECT * FROM ride时,我想告诉我ride_id, from_which_city, to_city like这个:

1 Manchester Liverpool 

而不是

1 8 3 Where 8 = ManchesterID and 3 = LiverpoolID

我试过左连接

SELECT * FROM ride LEFT JOIN city ON ride.from_which_city = city.id

它适用于from_which_city。如何执行此操作同时适用于from_which_cityto_city

我没有找到左连接的情况:t1.b = t2.a AND t1.c = t2.a

提前致谢!

4 个答案:

答案 0 :(得分:3)

试试这个:

SELECT r.id, c1.name, c2.name
FROM table1_ride r
JOIN table2_city c1 on r.from_which_city=c1.id
JOIN table2_city c2 on r.from_which_city=c2.id

答案 1 :(得分:1)

使用表别名:

SELECT ride.id, fromcity.name, tocity.name
FROM ride
LEFT OUTER JOIN city fromcity ON ride.from_which_city = fromcity.id
LEFT OUTER JOIN city tocity ON ride.to_city = tocity.id

答案 2 :(得分:0)

两次加入table2_city表并使用别名:

SELECT table1_ride.id, fc.name as from_city_name, tc.name as to_city_name
FROM table1_ride
INNER JOIN table2_city AS fc ON
    table1_ride.from_which_city=fc.id
INNER JOIN table2_city AS tc ON
    table1_ride.to_which_city=tc.id

(必要时用左外部替换......)。

答案 3 :(得分:-1)

SELECT c.id, m1.name, m2.name FROM mytabl1 as c, mytabl2 as m1, mytabl2 as m2
WHERE
c.cfrom = m1.city AND c.cto = m2.city
ORDER BY c.id

如果我使用上面的代码是我得到的,这就是你的预期。

id   name        name
1    City 1      City 2
2    City 3      City 4
3    City 1      City 3
4    City 2      City 4