MySQL과 동일한 Colum에서 왼쪽 결합을 두 번 사용하려면 어떻게합니까?

StackOverflow https://stackoverflow.com/questions/966782

  •  12-09-2019
  •  | 
  •  

문제

공항과 하나는 노선을위한 두 개의 테이블이 있습니다.

공항은 이렇게 보입니다

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'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top