2013-04-12 4 views
1

Я пытаюсь написать инструкцию SQL, которая вытащит значение из одной таблицы и ее соответствующее значение из другого. Это отлично работает, если одно из значений, которые используются в соединении, равно null, оно ничего не возвращает. Я хотел бы, чтобы скрипт возвращал значение (например, «Nothing») в случае, если соединение равно null. Это возможно? Я знаю, что я могу использовать NVL в select, но как насчет присоединения? Вот мой сценарий:Выбор NVL со связками

SELECT 
i.equip_pk, 
i.request_pk, 
MY_ALIAS.EQUIP_ALIAS_ID 
FROM 
tableOne i 
JOIN table2 MY_ALIAS ON (i.EQUIP_PK = MY_ALIAS.EQUIP_PK) 
WHERE i.request_pk=:requestPk 

Я использую Oracle 10g, но этот скрипт не будет использоваться как PL/SQL.

Спасибо за любую помощь

джейсон

ответ

2

Вы можете использовать LEFT JOIN. Это вернет все строки из tableOne, и когда он не сможет найти совпадение во второй таблице, он вернет значение null. Тогда вы можете использовать NVL, как вы упомянули.

SELECT 
i.equip_pk, 
i.request_pk, 
NVL(MY_ALIAS.EQUIP_ALIAS_ID, 'Nothing here') 
FROM tableOne i 
LEFT OUTER JOIN table2 MY_ALIAS ON (i.EQUIP_PK = MY_ALIAS.EQUIP_PK) 
WHERE i.request_pk=:requestPk 

Если вы ждете аннулирует от equip_pk, вы можете обратиться к NVL что. Даже если он равен нулю, LEFT JOIN по-прежнему будет давать правильный результат.

0
SELECT 
NVL(i.equip_pk, 'Nothing'), 
NVL(i.request_pk, 'Nothing)', 
MY_ALIAS.EQUIP_ALIAS_ID 
FROM 
tableOne i 
FULL JOIN table2 MY_ALIAS ON (i.EQUIP_PK = MY_ALIAS.EQUIP_PK) 
WHERE i.request_pk=:requestPk