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