Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接一个表,其中两列是另一个表中的id_Mysql - Fatal编程技术网

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