1

我有两个表,一个主表和一个正在进行的表。在操作记录时,任何插入/更新都将插入 WIP 表中,这允许进行验证检查等。我想创建一个视图,该视图组合了两个表,当 WIP 表数据存在时显示 WIP 表数据,而在没有 WIP 数据时显示主表数据。

我已经想出了一种方法来做到这一点,但它似乎不是最优雅的解决方案。我想知道是否有其他想法或更好的解决方案?

说明情况的示例:

select mt.id, wt.id wip_id, isnull(wt.name,mt.name) name, 
       isnull(wt.address, mt.address) address
from main_table mt full outer join
       wip_table wt on mt.id = wt.orig_id;

因此,当它们存在时,它将从 WIP 表中提取结果,如果它们不存在,它将从主表中提取结果。这是一个简单的示例,但表可能有很多行。

4

1 回答 1

0

如果您想要来自一个表或另一个表的数据:

select top 1 *
from
(
select 1 as prio, wt.name, wt.address, .... from wip_table wt where ...
union
select 2 as prio, mt.name, mt.address, .... from main_table mt where ...
order by prio
) x

否则,就像您所做的那样(检查各个列),但可能使用左外连接而不是完整连接:

select 
  mt.id
  , wt.id wip_id
  , isnull(wt.name,mt.name) name
  , isnull(wt.address, mt.address) address
from main_table mt left outer join wip_table wt 
  on mt.id = wt.orig_id;
于 2012-09-01T14:25:11.577 回答