SQLite3, выбрать из двух таблиц одну с приоритетом?

Итак, у меня есть две таблицы sqlite3

Таблица 1

ID Color Value
1 red    5
2 green  3
3 yellow 5
4 blue   1
5 white  4

Таблица 2

ID Color Value
2 green  6
3 yellow 2
5 white  3

Что я хотел бы сделать с одним выбором, если это возможно:

ID Color Value
1 red    5
2 green  6
3 yellow 2
4 blue   1
5 white  3

Поэтому используйте запись из таблицы 1, если она не существует в таблице 2. Если запись существует в таблице 2, используйте ее вместо этого.

Я смотрел на союзы, но не повезло. Я добавил четвертый столбец с 1 или 0 в нем, 1 — это данные таблицы 2, и попытался установить приоритет для второй таблицы с порядком по/ограничением 1, но это тоже не сработало.

Я надеюсь на один выбор, который просто сделает это автоматически, и мне не придется предоставлять выбор с предложением where и элементами для исключения, чтобы мне пришлось объединить строковый запрос.

Это возможно?


person user1493273    schedule 29.07.2012    source источник


Ответы (1)


select t1.ID, case when t2.Color is not null 
                   then t2.Color
                   else t1.Color
              end as Color,
              case when t2.Value is not null 
                   then t2.Value
                   else t1.Value
              end as Value
from table1 t1
left outer join table2 t2 on t1.id = t2.id

редактировать

Еще более короткая версия (спасибо Дугу):

select t1.ID, 
       coalesce(t2.Color, t1.Color) as Color, 
       coalesce(t2.Value, t1.Value) as Value
from table1 t1
left outer join table2 t2 on t1.id = t2.id
person juergen d    schedule 29.07.2012
comment
Ваше решение выглядит нормально, но вы можете заменить операторы case на coalesce(t2.Color, t1.Color) as Color, coalesce(t2.Value, t1.Value) as Value - person Doug Currie; 30.07.2012