2011-11-16 16 views
0

現在のSQL INSERT INTOステートメントにクエリを追加しようとしています。以下は私のテーブルと現在のSQLステートメントです。重複するレコードをチェックする追加のSQLクエリを追加する

表1ユーザーIDユーザー名

は、私は3つのテーブルを持っています。

表2ユーザーIDステータス

表3

INSERT INTO Table3(UserId, Username, Issue) 
SELECT COALESCE(t1.UserId, t2.UserId), t1.UserName 
    , CASE 
     WHEN (t2.userid IS NULL AND t1.userid IS NOT NULL) 
      THEN 'User exists in t1 but not in t2' 
     WHEN (t2.status = 'DELETE' AND t1.userid IS NOT NULL) 
      THEN 'User Exists in t1, but status in t2 is not DELETE' 
     WHEN (t2.userid IS NOT NULL AND t2.status != 'DELETE' AND t1.userid IS NULL) 
      THEN 'Non-Deleted user in t2 does not exist in t1' 
    END 
FROM table1 t1 
FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid 
WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL) 
    OR (t2.status = 'DELETE' AND t1.userid IS NOT NULL) 
    OR (t2.userid IS NOT NULL AND t2.status != 'DELETE' AND t1.userid IS NULL) 

:私は上記の3つのチェックを満たしてSELECT文を持っているし、表3に結果をINSERT現在

ユーザーIDユーザー名号今度は、重複したユーザーIDを確認し、のユーザーID、ユーザー名、およびIsを挿入する別のチェックを追加します。 「重複したユーザーIDがありました」と表題3に記載されている重複についてはとしてください。

  1. 同じキャップと同じユーザーIDの確認(例えばE01とE01が存在してはならない)
  2. 同じユーザーIDが異なるキャップのためのチェック(例えばE01とE01が存在してはならない)

どのように私がすべきこのSQLクエリを現在のSQL文に追加しますか?あなたはTable3内の重複ユーザーID値を引き起こすことになる(Duplicated userid foundでレコードを挿入したい場合は

+0

を表3に制約は '番目のレコードをINSERT'ingを防止することができます同じ 'UserID'を持つテーブルに? –

答えて

1

、次のコードを使用することができます

INSERT INTO Table3(UserId, Username, Issue) 
SELECT COALESCE(t1.UserId, t2.UserId), t1.UserName 
    , CASE 
     WHEN (t3user.UserId IS NOT NULL OR t3Status.UserId IS NOT NULL) 
      THEN 'Duplicated userid found' 
     WHEN (t2.userid IS NULL AND t1.userid IS NOT NULL) 
      THEN 'User exists in t1 but not in t2' 
     WHEN (t2.status = 'DELETE' AND t1.userid IS NOT NULL) 
      THEN 'User Exists in t1, but status in t2 is DELETE' 
     WHEN (t2.userid IS NOT NULL AND t2.status != 'DELETE' AND t1.userid IS NULL) 
      THEN 'Non-Deleted user in t2 does not exist in t1' 
    END AS Issue 
    FROM table1 t1 
    FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid 
    LEFT JOIN Table3 AS t3user ON t1.UserID = t3user.UserId 
    LEFT JOIN Table3 AS t3status ON t2.UserId = t3status.UserId 
    WHERE 
    (
     (t2.userid IS NULL AND t1.userid IS NOT NULL) 
     OR (t2.status = 'DELETE' AND t1.userid IS NOT NULL) 
     OR (t2.userid IS NOT NULL AND t2.status != 'DELETE' AND t1.userid IS NULL) 
    ) 
関連する問題