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