2016-08-19 4 views
1

У меня есть две таблицы, как показано нижеJoin Table и заполнить пустой столбец с возвращаемым значением таблицы

TableA 
A_id name 
---- ---- 
123  Test1 
124  Test2 
125  Test3 
126  Test4 

TableB 
B_id fk_A_id value  type_id 
---- ------- -----  ------- 
1  123  op1  1 
2  123  hello  2 
3  123  abc  3 
4  126  op2  1 
5  126  hello  2 
6  126  def  3 

я использую запрос присоединиться ОБА таблица

select TableA.A_id as id, TableA.name as name, TBL2.type_name as type_name 
from TableA 
full join (
select fk_A_id, value as type_name 
from TableB 
where type_id = 2 
)TBL2 on TableA.A_id = TBL2.fk_A_id 

возвращение результат будет

id   name   type_name 
--   ----   --------- 
123   Test1   hello 
124   Test2    
125   Test3 
126   Test4   hello 

мой вопрос в том, как я заполняю нулевой столбец «hello», а также результат возврата из TableB, type_id = '2' будет иметь аналогичную строку через этот TableB

+0

Я не совсем понимаю. Зачем вам нужно заполнять столбец «null» символом «привет»? Предполагаете ли вы, что 'type_id = 2' всегда будет возвращать' hello'? Если это так, это будет другой запрос с использованием «cross join». – sgeddes

+0

Да, сами данные для type_id = 2 будут также «hello» – hghew

+0

Если вы знаете, что это всегда 'hello', почему бы просто не использовать' hello'? Если это динамически основано на 'type_id', тогда вы должны использовать' cross join'. Тем не менее, ваши данные примера не предполагают, что 'type_id' всегда одинаково для' значения' ... – sgeddes

ответ

0

Я думаю, что вы хотите left join, как это:

select a.A_id as id, a.name as name, b.type_name as type_name 
from TableA a left join 
    TableB b 
    on a.A_id = b.fk_A_id and b.type_id = 2; 

Там нет необходимости для подзапроса и full join является излишеством.

Если вы хотите, чтобы значение NULL также быть hello, используйте coalesce():

select a.A_id as id, a.name as name, 
     coalesce(b.type_name, 'hello') as type_name 
from TableA a left join 
    TableB b 
    on a.A_id = b.fk_A_id and b.type_id = 2; 
+0

да, попробовал ваш запрос, кажется, дает тот же результат, но я хотел заполнить нулевой столбец приветствием – hghew

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