Левое соединение, которое всегда включает пустые записи

I ' m, используя Oracle 11gR2 , и я пытаюсь написать запрос, который возвращает адресные данные из двух таблиц, CUSTOMERS и LOCATIONS . У конкретного клиента могут быть (или не быть) разные местоположения, каждое со своим адресом.

Я хотел бы вернуть адрес для каждого клиента и всех его местоположений. Например, если в таблицах содержатся такие данные, как:

CUSTOMERS
CUSTOMER_ID    ADDRESS
    1         "New York"
    2         "California"

LOCATIONS CUSTOMER_ID LOCATION_ID ADDRESS 1 1 "New Jersey"

Тогда я хочу, чтобы результаты выглядели так:

CUSTOMER_ID    LOCATION_ID    ADDRESS
   1                         "New York"
   1                1       "New Jersey"
   2                        "California"

Моя первая мысль была примерно такой:

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)

Проблема в том, что, когда у клиента есть местоположения, он не возвращает строку с нулевыми значениями для данных о местоположении, поэтому я не получаю строку с адресом в таблице CUSTOMERS . Это дает мне что-то вроде этого:

CUSTOMER_ID    LOCATION_ID    ADDRESS
   1                1       "New Jersey"
   2                        "California"

Отсутствует адрес Нью-Йорк для клиента 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)

Но он дал мне те же результаты, что и первый запрос. Есть ли способ вернуть пустую запись для второй таблицы, даже если есть совпадение по условию соединения?

10
задан Viacheslav Avsenev 16 November 2015 в 10:26
поделиться