programing

여러 열에서 내부 조인을 수행하는 방법

codeshow 2023. 8. 30. 22:18
반응형

여러 열에서 내부 조인을 수행하는 방법

저는 숙제 프로젝트를 하고 있고 도시 이름이나 공항 코드로 항공편을 찾는 데이터베이스 쿼리를 수행해야 하지만,flights표에는 공항 코드만 포함되어 있으므로 도시별로 검색하려면 가입해야 합니다.airports테이블.

공항 표에는 다음과 같은 열이 있습니다.code, city
비행 표에는 다음과 같은 열이 있습니다.airline, flt_no, fairport, tairport, depart, arrive, fare
fairport그리고.tairport출발지 및 도착지 공항 코드입니다.
depart그리고.arrive출발과 도착 날짜입니다.

나는 먼저 항공편에 합류하는 질문을 생각해냈습니다.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 Join 문을 시각적으로 표현하는 것이 SQL 문을 구성하는 방법에 대한 일반적인 가이드로서 매우 유용하다는 것을 알게 되었습니다!

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

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의 첫 번째 및 두 번째 복사본에 대한 별칭입니다.airports테이블.

왜 그냥 사용할 수 없습니까?AND에서ON조항?예:

SELECT *
FROM flights
INNER JOIN airports
   ON ((airports.code = flights.fairport)
       AND (airports.code = flights.tairport))

뭐랄까...

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 = '?'

edit: 코드 또는 도시에 대한 출력을 필터링하는 예제 추가

FROM 및 TO 공항에서 모두 검색하려면 Airports 테이블에 두 번 참여하고 결과 집합의 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
 ...
SELECT *
FROM flights
INNER JOIN airports
   ON ((airports.code = flights.fairport)
       OR (airports.code = flights.tairport))

위와 같이 JOIN Condition 내에서 OR을 사용할 수 있습니까?

언급URL : https://stackoverflow.com/questions/2366780/how-to-do-an-inner-join-on-multiple-columns

반응형