[sql] 여러 열에서 INNER JOIN을 수행하는 방법

숙제 프로젝트를 진행 중이며 도시 이름이나 공항 코드로 항공편을 찾는 데이터베이스 쿼리를 수행해야하지만 flights테이블에는 공항 코드 만 포함되어 있으므로 도시별로 검색하려면 airports테이블 에 조인 하십시오.

공항 테이블에는 다음과 같은 열이 있습니다 code, city
플라이트 (flight) 테이블에는 다음과 같은 열이 있습니다 airline, flt_no, fairport, tairport, depart, arrive, fare
열을 fairport하고 tairport이다 에서 공항 코드.
departarrive출발 및 도착 날짜입니다.

먼저 fairport열과 열의 항공편을 조인하는 쿼리가 나타났습니다 airports.code. tairport내가 일치하도록 하려면 첫 번째 조인의 이전 경기에서 다른 조인을 수행해야합니다.

SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
    FROM (SELECT * FROM flights
        INNER JOIN airports
        ON flights.fairport = airports.code
        WHERE (airports.code = '?' OR airports.city='?')) AS matches
    INNER JOIN airports
    ON matches.tairport = airports.code
    WHERE (airports.code = '?' OR airports.city = '?')

내 쿼리는 올바른 결과를 반환하고 숙제의 목적으로 충분하지만 JOIN여러 열에서 할 수 있는지 궁금합니다 . WHERE출발 및 도착 도시 / 코드와 일치하도록 조항을 어떻게 구성 합니까?

아래는 내가 달성하고자하는 것에 대한 “의사 쿼리”이지만 구문을 올바르게 얻을 수 없으며 airports출발지와 목적지에 대한 테이블 을 나타내는 방법을 모르겠습니다 .

SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code AND flights.tairport = airports.code
WHERE (airports.code = 'departureCode' OR airports.city= 'departureCity')
    AND (airports.code = 'destinationCode' OR airports.city = 'destinationCity')

최신 정보

나는 또한 발견 제표에 참여 SQL의 시각적 표현을매우 SQL 문을 구성하는 방법에 대한 일반적인 가이드로 도움이!



답변

다음 예제와 같이 조인 된 테이블에 alias 를 지정하여 동일한 테이블로 두 번 이상 JOIN 할 수 있습니다 .

SELECT
    airline, flt_no, fairport, tairport, depart, arrive, fare
FROM
    flights
INNER JOIN
    airports from_port ON (from_port.code = flights.fairport)
INNER JOIN
    airports to_port ON (to_port.code = flights.tairport)
WHERE
    from_port.code = '?' OR to_port.code = '?' OR airports.city='?'

점을 유의 to_port하고 from_port의 제 2 복사본에 대한 별칭 airports테이블.


답변

뭔가 …

SELECT f.*
      ,a1.city as from
      ,a2.city as to
FROM flights f
INNER JOIN airports a1
ON f.fairport = a1. code
INNER JOIN airports a2
ON f.tairport = a2. code


답변

mysql이 괜찮다면 :

SELECT flights.*,
       fromairports.city as fromCity,
       toairports.city as toCity
FROM flights
LEFT JOIN (airports as fromairports, airports as toairports)
ON (fromairports.code=flights.fairport AND toairports.code=flights.tairport )
WHERE flights.fairport = '?' OR fromairports.city = '?'

편집 : 코드 또는 도시의 출력을 필터링하는 예제 추가


답변

on 절에서 사용할 수 있습니까?

예를 들면 다음과 같습니다.

SELECT
   airline, flt_no, fairport, tairport, depart, arrive, fare
FROM
   flights
INNER JOIN
   airports from_port ON (from_port.code = flights.fairport)
   and (to_port.code = flights.tairport)


답변

FROM 및 TO 공항에서 모두 검색하려면 공항 테이블에서 두 번 조인하고 싶을 때 결과 집합에서 출발 및 도착 테이블을 모두 사용할 수 있습니다.

SELECT
   Flights.*,fromAirports.*,toAirports.*
FROM
   Flights
INNER JOIN
   Airports fromAirports on Flights.fairport = fromAirports.code
INNER JOIN
   Airports toAirports on Flights.tairport = toAirports.code
WHERE
 ...


답변