SQLite3,从两个表中选择一个优先级?

时间:2012-07-29 18:41:11

标签: sqlite select join union

所以我有两个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

因此,除非表2中存在记录,否则请使用表1中的记录。如果表2中存在记录则使用该记录。

我看了工会但没有运气。我添加了第4列,其中包含1或0,其中1是表2数据,并尝试按照/限制1的顺序对表2进行优先排序,但这也不起作用。

我希望有一个select会自动执行,而不必为select提供where子句和要排除的项目,这样我就不得不对字符串查询进行连接。

这可能吗?

1 个答案:

答案 0 :(得分:2)

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

修改

更短的版本(感谢Doug)是:

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