2017-09-19 46 views
0

2つのテーブルのいずれにも存在しないデータを削除するクエリのロジックを書く際に問題が発生しました。2つのテーブルとの差分を取得し、SQL Serverで削除する

たとえば、私はテーブル "ステージ"と "親"を持っています。私はユニークなアイデンティティレコード(複数のプライマリキー)に複合プライマリキーを使用しています。

段構造とデータ

S_Column1(Primary) | PRIDATA1 | PRIDATA4 
S_Column2(Primary) | PRIDATA2 | PRIDATA5 
S_Column3(Primary) | PRIDATA3 | PRIDATA6 
S_Column4   | DJUC  | JDNC 
S_Column5   | DSSDC | JDDOS 

親構造及びデータ

P_Column1(Primary) | PRIDATA1 | PRIDATA4 | PRIDATA7 
P_Column2(Primary) | PRIDATA2 | PRIDATA5 | PRIDATA8 
P_Column3(Primary) | PRIDATA3 | PRIDATA6 | PRIDATA9 
P_Column4   | DJUC  | JDNC  | FFED 
P_Column5   | DSSDC | JDDOS | NHUY 

は上記構造と二つのテーブルのデータのちょうどサンプルです。 基本的には、 PRIDATA7 PRIDATA8PRIDATA9を主キーとする行を削除するクエリを作成します。そのエントリはSTAGE TABLEには存在しないためです。

私は熟練していないですが、私はJOINを使用して一致するデータを見つけると、そのエントリのステージテーブルに存在しない

PS親テーブルからのデータの残りの部分を削除する必要があります知っている:私は使用していますこれはトリガーの中にあります。

答えて

3

delete from parent 
where not exists (
    select 1 
    from stage s 
    where s.S_Column1 = parent.S_Column1 and s.S_Column2 = parent.S_Column2 and s.S_Column3 = parent.S_Column3) 
+0

ありがとうございます! ?Select 1? – Wocugon

+0

Existsはデータを返さないブールtrue/false。Selectの任意のデータが実行されるので、1を選択するだけで不必要な作業が少なくなります。 – Serg

1

あなたはEXCEPT演算子を探しているかもしれません。 はここで読む:https://msdn.microsoft.com/pl-pl/library/ms188055(v=sql.110).aspx

+0

存在しないようにしてくださいはい、私はそれを考えたが、私はそれだけを選択して表示することができます。 EXCEPTを使用してこれらのデータを削除するにはどうすればよいですか? – Wocugon

+1

あなたは削除するデータを持つ一時テーブルを作成し、親テーブルからwhere句を使用して削除することができます(例えば、#somethingから何かを選択してください) –

関連する問題