1

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

如果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;

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

任何帮助都会很棒。

4

3 回答 3

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 语句,它起作用了。谢谢。

于 2012-10-11T20:07:18.483 回答
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

尝试仅使用 CROSS JOIN(笛卡尔积连接)而不是 JOIN。对于插入尝试 INSERT INTO TABLE (column1, column2, column3) SELECT column1, column2, column3 FROM TABLE; 以相同的顺序。

于 2012-10-11T17:49:48.167 回答