我有一张表,其中包含多年来由许多不同用户修改过的培训历史记录。这导致两次输入相同的训练记录。我想创建一个复制主表并插入所有重复记录的表。
如果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;
查询运行并返回看似唯一的行。我想要所有的重复。每当我尝试将其插入到相同的表中时,我会收到一个错误,指出我的列数与我的值计数不匹配。
任何帮助都会很棒。
答案 0 :(得分: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
;
答案 1 :(得分:0)
尝试使用CROSS JOIN(笛卡尔积加入)代替JOIN。对于insert,请尝试INSERT INTO TABLE(column1,column2,column3)SELECT column1,column2,column3 FROM TABLE;按顺序排列。
答案 2 :(得分:0)
感谢您的帮助。在我发布问题后不久我发现了答案(即使我已经找了一个多小时的答案:))以下是我使用的:
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语句,但它确实有效。 感谢。