简体   繁体   English

如何在与MySQL相同的列上使用左连接两次?

[英]How do I use a Left Join twice on the same colum with MySQL?

I have two tables, one for airports and one for routes. 我有两张桌子,一张用于机场,一张用于路线。

Airports looks a little like this 机场看起来有点像这样

Airports
-------------------------------------
id | code | name                    |
-------------------------------------
01 | LGW  | London Gatwick          |
-------------------------------------
02 | LHR  | London Gatwick          |

and so on.... 等等....

and another for routes like this 和另一个像这样的路线

Routes
---------------------------
id | ORIGIN | DESTINATION |
---------------------------
01 | LGW    | VCE         |
---------------------------
02 | TSF    | LHR         |

and so on... 等等...

I need to Select routes from the table, but I also want to get the airport names as well. 我需要从表中选择路线,但我也想获得机场名称。 The confusing bit is that I need to query the airport code twice. 令人困惑的是,我需要两次查询机场代码。 I'm trying something like this 我正在尝试这样的事情

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'

Which you may or may not know, doesn't work. 您可能知道或不知道哪些不起作用。 How would I go about doing this? 我该怎么做呢?

Use aliases: 使用别名:

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'

Just give the table two different aliases. 只需给表两个不同的别名。 Something like (untested); 像(未经测试的);

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'

You need to add the AIRPORTS table twice using aliases.... 您需要使用别名添加两次AIRPORTS表....

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;

Put an alias on the table names: 在表名上加上别名:

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'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM