Mysql 连接一个表,其中两列是另一个表中的id
首先,任何改进我的问题标题的建议都是非常受欢迎的。这是我的解释 我有两张桌子。一个是航班,另一个是机场Mysql 连接一个表,其中两列是另一个表中的id,mysql,Mysql,首先,任何改进我的问题标题的建议都是非常受欢迎的。这是我的解释 我有两张桌子。一个是航班,另一个是机场 flights ------------------------------------------------------------------- id | departure_id | destination_id | departure_date | arrival_date -------------------------------------------------------
flights
-------------------------------------------------------------------
id | departure_id | destination_id | departure_date | arrival_date
-------------------------------------------------------------------
1 |1 | 5 | 2014-05-01 | 2014-05-01
-------------------------------------------------------------------
airports
-----------------------------------
id | country_id | name | timezone |
-----------------------------------
1 | 1 | TPE | +08:00 |
-----------------------------------
5 | 2 | HND | +09:00 |
-----------------------------------
我需要这个结果:
-----------------------------------------------------------
departure_date | departure_tz | arrival_date | arrival_tz |
-----------------------------------------------------------
2014-05-01 | +08:00 | 2014-05-01 | +09:00 |
-----------------------------------------------------------
我有这个查询,但没有给出我想要的结果,因为我不知道如何建立目的地id、出发地id与表aiports之间的关系,它们都是机场表中的id,请提供任何建议。这是我的查询,但没有区分时区,这是我最想显示的信息
SELECT flights.flight_number,
flights.departure_date,
airports.timezone as departure_tz,
flights.arrival_date,
airports.timezone as arrival_tz
FROM flights
JOIN airports
也许两个加入
SELECT
t1.id AS flight_number
t1.departure_date,
t2.timezone AS departure_tz
t1.arrival_date
t3.timezone AS arrival_tz
FROM flights t1
LEFT JOIN airports t2
ON t1.departure_id = t2.id
LEFT JOIN airports t3
ON t1.arrival_id = t3.id
在
查询中缺少的位置,以及当您希望从机场连接到两个单独的行时,您需要使用该表的两个实例 尝试在子句中添加一个(如果愿意,可以使用
添加)。MySQL允许使用非常奇怪的语法,即不带on
子句的join
子句。这在任何其他数据库中都是错误的。从航班到机场加入两次。一次用于出发,一次用于目的地。我也使用了,但是它们之间的条件似乎不明显。我试过这个,但没有结果。选择flights.flights\u number、flights.offering\u date、airports.timezone作为出发时间、flights.arrival\u date、airports.timezone作为到达时间,从航班加入航班上的机场。出发时间=airports.id和flights.destination\u id=机场。id@xQbert可以两次连接相同的表吗?我试着这么做,但却出现了一个错误。是的,这是可能的。克里斯蒂安、亚历克斯和马特提供了答案。注意:必须以不同的方式为表别名。在您的示例中,不要使用和。。。使用或,因为您想加入。。。然而,这将导致两行分开,这就是为什么我认为下面的答案更适合您的需要。非常感谢:)它帮助了我。
SELECT flights.flight_number,
flights.departure_date,
dep.timezone as departure_tz,
flights.arrival_date,
arvl.timezone as arrival_tz
FROM flights
LEFT JOIN airports dep
ON flights.departure_id = dep.id
LEFT JOIN airports arvl
ON flights.destination_id = arvl.id
SELECT flights.flight_number,
flights.departure_date,
dep.timezone as departure_tz,
flights.arrival_date,
arvl.timezone as arrival_tz
FROM flights
LEFT JOIN airports dep
ON flights.departure_id = dep.id
LEFT JOIN airports arvl
ON flights.destination_id = arvl.id