2016-05-04 3 views
-1

У меня есть две таблицы, ROLE и ROLE_DESC.Внешнее соединение двух таблиц

ROLE выглядит так.

PS_ROLE_SEQ NUMBER,  
PS_SEQ  NUMBER,  
ROLE_TYPE   VARCHAR2(2 CHAR),  
SOURCE    VARCHAR2(128 CHAR) 

ROLE_DESC выглядит следующим образом.

ROLE_TYPE VARCHAR2(2 CHAR),  
ROLE_NAME VARCHAR2(16 CHAR) 

Как вы ожидаете, ROLE_TYPE из РОЛИ andROLE_TYPE из ROLE_DESC ссылки друг друга. Есть три объекта в ROLE_DESC, вот так.

ROLE_TYPE ROLE_NAME 
A   Account 
M   Manager 
S   Sales 

Я хотел бы напечатать весь role_type и role_name путем присоединения двух таблиц даже мысли ROLE таблица не имеет определенного ROLE_TYPE. Например, если нет «S» role_type для PS_SEQ = 111. Я пробовал, это, но я только получил ниже.

select ROLE_DESC.ROLE_TYPE, ROLE_DESC.ROLE_NAME, ROLE.SOURCE 
FROM ROLE_DESC 
LEFT OUTER JOIN ROLE 
ON ROLE_DESC.role_type=ROLE.role_type 
where ROLE.PS_SEQ = 111 

Результат:

A Account Bob 
M Manager Sandy 

На самом деле, я хотел бы получить следующее.

A Account Bob 
M Manager Sandy 
S Sales 

Внешнее соединение делает это возможным? Не могли бы вы дать некоторые подсказки для этого вопроса?

+2

Не так ли, как [этот] (http://stackoverflow.com/questions/37027903/join-two-tables-when не -есть-это-не-значение-в-одном стола)? – Aleksej

+0

Это другое, но цель такая же. если вы хотите, я могу удалить предыдущий вопрос. Прошу прощения за путаницу. –

+1

Предлагаю изменить первый вопрос, а затем закрыть это – Aleksej

ответ

0
select ROLE_DESC.ROLE_TYPE, ROLE_DESC.ROLE_NAME, ROLE.SOURCE 
    FROM ROLE_DESC 
    LEFT OUTER JOIN ROLE 
ON ROLE_DESC.role_type=ROLE.role_type AND ROLE.PS_SEQ = 111 

Когда это предложение WHERE, вы фильтруете результат. И в результате ROLE.PS_SEQ является Null for Sales и Null <> 111

+0

Большое вам спасибо, я решил это из вашего ответа. –

Смежные вопросы