여러 열에서 내부 조인을 수행하는 방법
저는 숙제 프로젝트를 하고 있고 도시 이름이나 공항 코드로 항공편을 찾는 데이터베이스 쿼리를 수행해야 하지만,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
'programing' 카테고리의 다른 글
UISegmentedControl의 글꼴 색을 변경하는 방법 (0) | 2023.08.30 |
---|---|
Express가 멋지게 포맷된 HTML을 출력하려면 어떻게 해야 합니까? (0) | 2023.08.30 |
Excel 스프레드시트의 C#에서 시트 이름을 변경하는 방법 (0) | 2023.08.30 |
Ebean - 동적 쿼리 - 준비된 문의 불일치 매개 변수 개수 오류 (0) | 2023.08.30 |
고유 키가 정의된 mariadb 테이블의 이상한 동작(즉, 고유하지 않음) (0) | 2023.08.30 |