如果当前表中不存在,则从其他表中选择行

Posted

技术标签:

【中文标题】如果当前表中不存在,则从其他表中选择行【英文标题】:Select Row from Other Table if Doesn't Exist in Current Table 【发布时间】:2013-03-15 18:48:59 【问题描述】:

我有两张桌子:

表1

id   name       qty
1    Tedd       6
2    Jim        7
3    Sally      8
4    Victoria   1

表2

id   name       qty
1    Tedd       2
2    Jim        2
3    Sally      2
4    Victoria   1
5    Alex       9

我需要从 Table1 中选择所有行。但是,如果 Table2 中存在 Table1 中不存在的行,我需要将其包含在结果集中。所以,最后,我的查询应该返回:

id   name       qty
1    Tedd       6
2    Jim        7
3    Sally      8
4    Victoria   1
5    Alex       9

有没有办法做到这一点?谢谢。

【问题讨论】:

【参考方案1】:

您可以使用FULL OUTER JOIN

select 
  coalesce(t1.id, t2.id) id,
  coalesce(t1.name, t2.name) name,
  coalesce(t1.qty, t2.id) qty
from table1 t1
full outer join table2 t2
  on t1.id = t2.id

见SQL Fiddle with Demo

【讨论】:

以上是关于如果当前表中不存在,则从其他表中选择行的主要内容,如果未能解决你的问题,请参考以下文章

如何不选择其他表中不存在的行

mysql - 如果不在另一个表中,则从一个表中选择,否则从另一个表中选择

如果值存在于多个表中,则从表中获取结果

如果产品表中存在品牌 ID,则从品牌表中获取品牌 ID 名称

如果 Redshift 中存在表,则从表中删除行,否则忽略删除

如果某个字段值出现在另一个表中,则从一个表中排除记录