我有一个表格,其中包含过去几年中许多不同用户修改的培训历史记录。这导致两次输入相同的训练记录。我想创建一个复制主表并插入所有重复记录的表。

如果employee_id,course_code和completion_date全部匹配,则构成重复记录。

我可以创建重复表,并且有一条select语句似乎可以拉出重复项,但是它只拉出其中一个,因此我需要它来拉出两个(或多个)它们。这是因为一个人可能以不同的课程名称输入了培训记录,但是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;


查询运行并返回看起来唯一的行。我想要所有重复的东西。每当我尝试将其插入到相同的表中时,都会收到一条错误消息,指出我的列数与我的值数不匹配。

任何帮助都会很棒。

最佳答案

这将选择任何重复的行以插入到新表中。

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
;

09-10 07:59
查看更多