0

同じ主キーを持つ 2 つのテーブル (Table1 と Table2) があり、Key1 と Key2 とします。私がする必要があるのは、Table1 のレコードを重複 (Table2 にあるレコード) と非重複の 2 つのグループに分けることです。以下を使用できることはわかっていますが、それは肥大化して繰り返しのようです。おそらく単一の呼び出しで、これを行うトリマーの方法はありますか?

SELECT Key1, Key2 FROM Table1 WHERE Key1 IN (SELECT Key1 FROM Table2) AND Key2 IN (SELECT Key2 FROM Table2);
SELECT Key1, Key2 FROM Table1 WHERE Key1 NOT IN (SELECT Key1 FROM Table2) AND Key2 NOT IN (SELECT Key2 FROM Table2);

;

この呼び出しは、C# ASP.NET コードビハインド ページから行われています。

4

2 に答える 2

3

このクエリは、左外部結合を実行して、table1 のすべてのレコードが返されるようにします。Table2 で結合し、一致するものがない場合、Table2 のどの列もその行に対して NULL になります。この動作は CASE ステートメントで使用され、Table1 行が Table2 のどこに存在するかを示すフラグを設定します。

select t1.*,
    case when t2.Key1 is null then 'false' else 'true' end as IsDuplicate
from Table1 t1
left outer join Table2 t2 on t1.Key1 = t2.Key1
    and t1.Key2 = t2.Key2

次に、列に基づいてアプリケーションをフィルタリングできIsDuplicateます。

于 2012-05-18T12:37:59.400 に答える
0

SQL2008 の新しい upsert ステートメントを確認してください SQL2008 の Upsert

于 2012-05-18T12:40:49.870 に答える