在mysql中使用select语句插入表中

时间:2012-10-11 17:32:11

标签: mysql insert

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

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

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

任何帮助都会很棒。

3 个答案:

答案 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语句,但它确实有效。 感谢。