source

늘 레코드를 포함하는 왼쪽 조인

manycodes 2023. 10. 18. 22:52
반응형

늘 레코드를 포함하는 왼쪽 조인

사용하고 있습니다.Oracle 11gR2두 개의 테이블에서 주소 데이터를 반환하는 쿼리를 작성하려고 합니다.CUSTOMERS그리고.LOCATIONS. 특정 고객은 각자의 주소를 가진 서로 다른 위치를 가질 수도 있고 그렇지 않을 수도 있습니다.

모든 고객의 주소와 모든 위치를 반품하고 싶습니다.예를 들어, 표에 다음과 같은 데이터가 포함되어 있는 경우:

고객들.Customer_ID 주소1 뉴욕2 캘리포니아

위치고객_ID위치_ID주소11 뉴저지

그런 다음 결과를 다음과 같이 나타낼 수 있기를 바랍니다.

고객_ID위치_ID주소1 뉴욕11 뉴저지2 캘리포니아

제가 처음 생각한 것은 다음과 같습니다.

SELECT 
 CUSTOMERS.CUSTOMER_ID,
 LOCATIONS.LOCATION_ID,
 NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
 LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID)

문제는 고객이 위치를 가지고 있을 때 위치 데이터에 대한 null 값이 있는 행을 반환하지 않기 때문에 주소가 있는 행을 받지 못한다는 것입니다.CUSTOMERS테이블. 이는 나에게 다음과 같은 것을 줍니다.

고객_ID위치_ID주소11 뉴저지2 캘리포니아

그것은 놓치고 있습니다.New York주소를 지정customer 1. 이거 해봤는데...

SELECT 
 CUSTOMERS.CUSTOMER_ID,
 LOCATIONS.LOCATION_ID,
 NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
 LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID OR LOCATIONS.CUSTOMER_ID IS NULL)

하지만 첫번째 질문과 같은 결과를 얻었습니다.조인 조건이 일치하는 경우에도 두 번째 테이블에 대한 null record를 반환할 수 있는 방법이 있습니까?

여기에 가입할 필요는 전혀 없습니다.

SELECT  customer_id, NULL AS location_id, address
FROM    customers
UNION ALL
SELECT  customer_id, location_id, address
FROM    locations

풀 아우터 조인을 시도해 볼 수 있습니다.예를 들어,

SELECT    
CUSTOMERS.CUSTOMER_ID,   
LOCATIONS.LOCATION_ID,   
NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS             
FROM  CUSTOMERS   
  FULL OUTER JOIN  LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID)

일치하지 않는 경우에도 두 테이블에 합류하려면 다음을 사용해야 합니다.IS NULL당신의 칼럼에.

예를들면.

Table 1:
CustomerID
CustomerName

.

Table 2:
CustomerID
CustomerEmail

.

Select,
CustomerID,
CustomerName,
ISNULL (CustomerEmail, NULL) AS CustomerEmail


FROM table1

LEFT JOIN table2
ON table1.CustomerID = table2.CustomerID

이를 통해 다음과 같은 결과를 얻을 수 있습니다.NULL

언급URL : https://stackoverflow.com/questions/4548201/left-join-that-always-includes-null-records

반응형