データベースはSQL Server 2008です。1つ以上の表から行を抽出し、それらを表変数に挿入しようとする問合せがあります。重複する表の挿入を防止する
私は私が思い付いたので、何を、重複した挿入を防止するためのefficentの道を希望:
INSERT INTO @MyTableVariable
SELECT SomeID
FROM SomeTable st
INNER JOIN SomeOtherTable sot ON sot.SomeID = st.SomeID
LEFT JOIN @MyTableVariable t ON t.SomeID = sot.SomeID
WHERE t.SomeID IS NULL
これは、しかし、特定のシナリオでの重複挿入を防ぐためには表示されません。
@MyTableVariableの最初の "状態"だけが左の結合操作で使用されているように見えます(このことを考えて、クエリプランを見ると意味があります)。言い換えれば、この文が実行される前に@MyTableVariableにSomeIDがすでに含まれていれば重複を防ぐことができますが、SomeTable/SomeOtherTalbeのFROM/INNER JOINがSomeIDを重複させた場合は重複を防ぎません。
SELECT文でDISTINCTを単に叩くだけでなく、これを処理するもう1つの効率的な方法がありますか?
'DISTINCT'または' GROUP BY'を実行したくない場合は、カラムにユニークなインデックスを作成し、重複したキーを無視することができます。 – Lamak
重複しているキーエラーをどのように無視するのですか?そして、これは実際に別個のものを実行するよりも速いのですか? – RMD