2017-01-12 10 views
1

テーブルにカラム情報を挿入したいと思います。2つのidの組み合わせがテーブルにまだ存在しない場合にのみテーブルに値を挿入してください

AIDとBIDが同じ行に既に存在しない場合にのみ、挿入する場所に挿入する句を挿入します。

AIDは同じ行に異なるBIDを持つ異なる行に存在するため、where != AIDを実行することはできません。

しかし、私はAIBとBIDの1つの組み合わせを保持する必要があります。

したがって、同じ行にAIBとBIDの重複した行を入れたくないだけです。

私はrowA != AID AND rowB != BIDを試しましたが、これはAIDとBIDの最初の行がテーブルに存在しないことを意味します。 AIDとBIDの組み合わせは1つだけ必要です。

+3

「存在しない」を参照してください。 – Siyual

+1

AIDとBIDは複合キーを形成しますか? – jsheeran

+0

実際には、AIDと別の属性を使ってユーザーを表示するインターフェイスがあります。 BIDでトレーニングが完了しましたが、私はこれらを私のインターフェースに複製したくありません。 –

答えて

1

このソリューションでは、WHERE EXISTS NOT()を使用して、ターゲットテーブルの2つの値を確認します。

AIDまたはBIDにNULL値を設定できる場合は、ISNULL()を使用して処理する必要があります。

INSERT INTO TABLE 
    (AID, BID, CID, INT) 
SELECT 
    AID, BID, CID -- problem here - where is value for INT? 
FROM ANOTHERTABLE 
WHERE NOT EXISTS 
    (
     SELECT 
      AID, BID 
     FROM TABLE 
     -- WHERE TABLE.AID & BID ... Wrong (thank you Gareth Lyons) 
      WHERE TABLE.AID = ANOTHERTABLE.AID 
      AND TABLE.BID = ANOTHERTABLE.BID 
    ) 
+0

&はSQL Serverの連結演算子ではありませんが、ビット単位の比較です。だから、文字列で失敗し、数値データに間違った答えを与えるでしょう。また、データ型は与えられていないので、連結が機能することはわかりません。連結には、適切な索引の使用を妨げる可能性があるなど、他の問題もあります。代わりにTABLE.AID = ANOTHERTABLE.AIDとTABLE.BID = ANOTHERTABLE.BIDを使用してください。 –

+0

おかげさまで@ガレスリーヨンズ。修正されたコードを見てください。 – Smandoli

+0

編集していただきありがとうございます –

関連する問題