0

私は以下を試しました。重複する行もありませんが、新しい行は挿入されません。どうしてこんなことに?私は何を間違えますか?どんな助けでも大歓迎です

     INSERT INTO TEMP_8
     SELECT PASS_M, ENTRY_DT, EXIT_D, WORKED_HRS, 
            CONSECUTIVE_D = num -(SELECT max(num)
                                  FROM TEMP_7 B
                                  WHERE B.CONSEC <= A.CONSEC
                                        AND B.GAP = 1
                                        AND A.IC_N = B.IC_N) + 1
     FROM TEMP_7 A
     WHERE NOT EXISTS (SELECT *
                       FROM TEMP_8);  

アップデート:

PASS_M ENTRY_DT, EXIT_DT, WORKED_HRS  
peter 20/12/12 21/12/12 12  
Tom 20/12/12 21/12/12 10  
Tom 21/12/12 22/12/12 9  

これらは重複ではありません。重複とはnameentry_dtexit_dtがまったく同じである場合です。

4

2 に答える 2

2
 INSERT INTO TEMP_8
 SELECT PASS_M, ENTRY_DT, EXIT_D, WORKED_HRS, 
        CONSECUTIVE_D = num -(SELECT max(num)
                              FROM TEMP_7 B
                              WHERE B.CONSEC <= A.CONSEC
                                    AND B.GAP = 1
                                    AND A.IC_N = B.IC_N) + 1
 FROM TEMP_7 A
 WHERE NOT EXISTS (SELECT *
                   FROM TEMP_8 B
                   WHERE B.PASS_M = A.PASS_M 
                   and B.ENTRY_DT = A.ENTRY_DT 
                   and B.EXIT_D = A.EXIT_D); 
于 2012-12-26T09:47:20.277 に答える
1

次のように、selectのデータでExistsをフィルタリングする必要があります。

 INSERT INTO TEMP_8
 SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, 
        CONSECUTIVE_D = num -(SELECT max(num)
                              FROM TEMP_7 B
                              WHERE B.CONSEC <= A.CONSEC
                                    AND B.GAP = 1
                                    AND A.IC_N = B.IC_N) + 1
 FROM TEMP_7 A
 WHERE NOT EXISTS (SELECT 1
                   FROM TEMP_8 T
 WHERE A.PASS_M=T.PASS_M AND A.ENTRY_DT=T.ENTRY_DT AND A.EXIT_DT=T.EXIT_DT);
于 2012-12-26T21:08:32.717 に答える