1

長年にわたってさまざまなユーザーによって変更されたトレーニング履歴を持つテーブルがあります。これにより、同じトレーニング レコードが 2 回入力されました。メイン テーブルを複製するテーブルを作成し、すべての重複レコードを挿入したいと考えています。

重複レコードとは、employee_id、course_code、および completion_date がすべて一致する場合です。

重複テーブルを作成でき、重複をプルするように見えるselectステートメントがありますが、それらの1つだけをプルし、両方(またはそれ以上)をプルする必要があります。これは、1 人が別のコース名でトレーニング レコードを入力した可能性がありますが、ID、コード、および日付が同じであるため、重複したエントリであるためです。したがって、すべての重複をプルすることで、それが事実であることを検証できます。

これが私のSELECTステートメントです:

SELECT * 
FROM 
    training_table p1
JOIN 
    training_table p2 ON (
        p1.employee_id = p2.employee_id
        AND p1.course_code = p2.course_code
        AND p1.completion.date = p2.completion_date)
GROUP BY p1.ssn;

クエリが実行され、一意の行と思われるものが返されます。すべてのコピーを希望します。そして、同じテーブルに INSERT しようとすると、列の数が値の数と一致しないというエラーが表示されます。

どんな助けでも素晴らしいでしょう。

4

3 に答える 3

0

これにより、新しいテーブルに挿入する重複行が選択されます。

SELECT p1.* 

FROM   training_table p1

JOIN   
       (SELECT employee_id, course_code, completion_date
        FROM   training_table 
        GROUP BY employee_id, course_code, completion_date
        HAVING COUNT(*) > 1
       ) dups 
        ON  p1.employee_id = dups.employee_id
        AND p1.course_code = dups.course_code
        AND p1.completion_date = dups.completion_date
;
于 2012-10-11T17:43:55.523 に答える
0

JOIN のみではなく、CROSS JOIN (Cartesian Product Join) を使用してみてください。挿入の場合は、 INSERT INTO TABLE (column1, column2, column3) SELECT column1, column2, column3 FROM TABLE; を試してください。同じ順序で。

于 2012-10-11T17:49:48.167 に答える
0

助けてくれてありがとう。質問を投稿した直後に答えを発見しました(1時間以上答えを探していましたが:))私が使用したものは次のとおりです。

 SELECT  *
    FROM    training_table mto
    WHERE   EXISTS
            (
    SELECT  1
    FROM    training_table mti


    WHERE   mti.employee_id = mto.employee_ie
    AND mti.course_code = mto.course_code
    AND mti.completion_date = mto.completion_date
            LIMIT 1, 1
            )

INSERT ステートメントを追加したところ、機能しました。ありがとう。

于 2012-10-11T20:07:18.483 に答える