2016-11-07 6 views
1

У меня есть две таблицы с некоторыми записями же, например таблицы A:объединение двух таблиц на основе первичного ключа

ID   value  type 
1   1   2 
2   3   2 
3   3   2 

Таблица B:

ID  value  type 
2   3   1 
3   3   1 
4   1   1 

Я хочу, чтобы объединить их таким образом, чтобы в результате таблица выглядит

таблица C:

ID  value  type 
2   3   2 
3   3   2 
4   1   1 

т. Е. Удалите строки, не входящие в таблицу A, отобразите строки, которые имеют дубликат в таблице A с типом таблицы A, а также отобразите те строки, которые не указаны в таблице A.

До сих пор я выполнил команду UNION удалить дубликат

select * from table A union select * from table B 

но как получить тип из таблицы A? это можно сделать, или я должен их отдельно обновить.

+2

Если вы «удалите строки, которые не в таблице А», почему это строка с идентификатором '4' в таблице C? – Twinkles

+0

... удалить строки, которые не находятся в таблице A .... также отобразить те строки, которые не указаны в таблице A ... можете ли вы лучше объяснить? –

ответ

1

Вы можете сделать это с LEFT JOIN:

SELECT b.id,b.value, 
     COALESCE(a.type,b.type) as type 
FROM TableB b 
LEFT JOIN TableA a 
ON(a.id = b.id) 
+0

Помимо смешивания 'A' и' B', я пропустил что-нибудь еще? @Strawberry – sagi

+0

Я думаю, что это было, хотя исходный набор данных слишком низок, чтобы сказать наверняка. – Strawberry

1

Это делает то, что вы хотите

select b.id, b.value, ifnull(a.type,b.type) as type 
from b 
left join a 
on b.id = a.id; 
+0

@ Ответ sagi выглядит эквивалентно мне –

+0

@ Ответ sagi имеет то преимущество, что он соответствует стандарту ansi sql. Это просто означает, что он более портативный. – Strawberry

+0

А, спасибо. Я не знал, что –

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