【问题标题】:Insert into a table with a select statement in mysql在mysql中使用select语句插入表
【发布时间】:2012-10-12 04:07:18
【问题描述】:

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

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

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

任何帮助都会很棒。

【问题讨论】:

    标签: mysql insert


    【解决方案1】:

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

    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
    ;
    

    【讨论】:

    • 将此数据插入新表 在选择语句之前添加此行:CREATE TABLE Dup_Table
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      感谢您的帮助。我在发布问题后不久就发现了答案(尽管我已经寻找了一个多小时的答案:))这是我使用的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 2022-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多