1

メインテーブルと作業中のテーブルの2つのテーブルがあります。レコードが操作されている間、挿入/更新はすべてWIPテーブルに挿入されます。これにより、検証チェックなどが可能になります。WIPテーブルデータが存在する場合はそれを表示し、WIPデータが存在しない場合はメインテーブルデータを表示する2つのテーブルを組み合わせたビューを作成したいと思います。

私はこれを行う方法を考え出しましたが、それは最もエレガントな解決策ではないようです。他のアイデアやより良い解決策があるかどうか知りたいですか?

状況を説明する例:

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 に答える