私は2つのテーブルFinalList
とRemoveTheseIDsList
を持っています。どちらも同じプライマリキーID
を持っています。 FinalList
からRemoveTheseIDsList
にあるすべての行を削除したいとします。そのクエリがFinalList
からすべての単一の行を削除している必要があり、理論的にはSQL Server:このDeleteクエリはなぜ機能しないのですか?
Delete from FinalList
Where FinalList.ID not in (Select ID from RemoveTheseIDsList)
:だから、私はこの最初のクエリを書きました。代わりに、それは私が最終的に(仕事をする)この不格好な回避策に落ち着い0を削除:
Update FinalList set DeleteMe='Y'
from FinalList FLL
left join RemoveTheseIDsList REM on FLL.ID=REM.ID
where REM.ID is null
Delete from FinalList where DeleteMe='Y'
私の質問は:なぜ、最初のクエリは動作しませんでしたか?このクエリーを機能的にも小規模にも保つクイックフィックスはありますか?
あなたは**正** ** IDは実際には、「RemoveTheseIDsList」の主キーですか?私はそれがnullableであり、少なくとも1つの 'NULL'を含んでいると疑うか、' RemoveTheseIDsList'に 'ID'という列が全くなく、サブクエリが外側のクエリから' ID'カラムを参照しています。 –
どのようなエラーがありましたか?その最初のクエリは 'ID NOT IN()'ではなく 'ID IN()'を読み込むべきですか? –
@MichaelHaren - 左外部結合問合せはアンチ・セミ結合を行っていますが、記述にもかかわらず 'NOT IN'セマンティクスが必要であると推測します。 –