Я использую 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"
Отсутствует адрес 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)
Но он дал мне те же результаты, что и первый запрос. Есть ли способ вернуть пустую запись для второй таблицы, даже если в условии соединения есть совпадение?