У меня есть следующие таблицы:
ITEM_TABLE TYPE_TABLE
-------------- -------------------
|Item|Type_ID| |Type_ID|Type_Text|
-------------- -------------------
| A | 3 | | 1 | Table |
| B | 1 | | 2 | Chair |
| C | 1 | | 3 | Bench |
| D | 2 | -------------------
| E | NULL |
| F | 2 |
| G | 1 |
| H | 3 |
--------------
Я хочу, чтобы мой результат показывал значимую строку для типа, поэтому я объединяю две таблицы:
select
it.Item, tt.Type_ID
from
ITEM_TABLE it
left outer join TYPE_TABLE tt
on it.Type_ID = tt.Type_ID
Результат:
----------------
|Item|Type_Text|
----------------
| A | Bench |
| B | Table |
| C | Table |
| D | Chair |
| F | Chair |
| G | Table |
| H | Bench |
----------------
Обратите внимание, что для элемента E нет строки, поскольку он имеет ITEM_TABLE.Type_ID
NULL, и это значение не может удовлетворить условию соединения it.Type_ID = tt.Type_ID
.
Тем не менее, я хочу получить результат:
----------------
|Item|Type_Text|
----------------
| A | Bench |
| B | Table |
| C | Table |
| D | Chair |
| E | NULL | * note this row here, not present in the actual result
| F | Chair |
| G | Table |
| H | Bench |
----------------
Я пытался:
select
it.Item, tt.Type_ID
from
ITEM_TABLE it
left outer join TYPE_TABLE tt
on it.Type_ID = tt.Type_ID or it.Type_ID is null
, но это дало результат:
----------------
|Item|Type_Text|
----------------
| A | Bench |
| B | Table |
| C | Table |
| D | Chair |
| E | Table |
| E | Chair |
| E | Bench |
| F | Chair |
| G | Table |
| H | Bench |
----------------
, то есть три строки дляЭлемент E, по одному с каждым возможным TYPE_TABLE.Type_Text
значением.
Итак, как мне получить желаемый результат, с помощью оператора соединения, понимающего, что значение NULL
в столбце ITEM_TABLE.Type_ID
должно дать NULL
значение в столбце Type_Text
в результате?