题
我有两个表,一个用于机场,一个用于路由。
机场看起来像这样一点
Airports
-------------------------------------
id | code | name |
-------------------------------------
01 | LGW | London Gatwick |
-------------------------------------
02 | LHR | London Gatwick |
和等....
和另一个用于这样的路线
Routes
---------------------------
id | ORIGIN | DESTINATION |
---------------------------
01 | LGW | VCE |
---------------------------
02 | TSF | LHR |
和等等...
我需要从表中选择路线,但我也想在机场的名称为好。混乱的一点是,我需要查询机场代码的两倍。我想是这样的。
SELECT routes.*, airports.name as origin_name FROM routes
LEFT JOIN airports ON airports.IATA = routes.origin
LEFT JOIN airports ON airports.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
您可能会或可能不知道,不能正常工作。我怎么会去这样做呢?
解决方案
使用别名:
SELECT
routes.*,
a1.name AS origin_name,
a2.name AS destination_name
FROM routes r
LEFT JOIN airports a1 ON a1.IATA = r.origin
LEFT JOIN airports a2 ON a1.IATA = r.destination
WHERE
r.origin = 'LHR' AND r.destination = 'VCE' OR r.origin = 'VCE'
其他提示
只要给该表的两个不同的别名。类似的信息(未测试的);
SELECT routes.*, o.name as origin, d.name as destination FROM routes
LEFT JOIN airports o ON o.IATA = routes.origin
LEFT JOIN airports d ON d.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
您需要添加机场表两次使用别名....
SELECT ORIGIN_AIRPORT.NAME,
DESTINATION_AIRPORT.NAME
FROM AIRPORTS ORIGIN_AIRPORT,
AIRPORTS DESTINATION_AIRPORT,
ROUTES
WHERE ROUTES.ORIGIN = ORIGIN_AIRPORT.CODE
AND ROUTES.DESTINATION = DESTINATION_AIRPORT.CODE;
把一个别名上表名:
SELECT routes.*, a1.name as origin_name FROM routes
LEFT JOIN airports AS a1 ON a1.IATA = routes.origin
LEFT JOIN airports AS a2 ON a2.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
不隶属于 StackOverflow