将数据从表A复制到表B时出错

时间:2015-01-27 19:28:42

标签: mysql

我正面临一个错误

ERROR 1062 (23000): Duplicate entry '42322-xyz@yahoo.co.in' for key 'PRIMARY'
将数据从一个表复制到另一个表时

。 是否有可能绕过表A中的表A中的行,我正在尝试使用

INSERT INTO tableB SELECT * FROM tableA as A join v2_opens as B on A.id!=B.id and A.emailid != B.emailid WHERE  A.date='2015-01-27';

但是对于上述查询我收到错误:

ERROR 1136 (21S01): Column count doesn't match value count at row 1

请求您建议并帮助我如何克服这些问题。 我关心的是将数据从TableA复制到TableB,如果有任何重复条目(使用主键),则必须绕过它。

1 个答案:

答案 0 :(得分:0)

为了绕过行,我更喜欢on duplicate key update。这可以完全避免错误。

进行插入时,通常应包括要插入的列:

INSERT INTO tableB(col1, . . .)
    SELECT col1, . . .
    FROM tableA as A join
         v2_opens as B on A.id <> B.id and A.emailid <> B.emailid
    WHERE  A.date='2015-01-27'
    ON DUPLICATE KEY UPDATE col1 = values(col1);

但是,如果这个查询真的想要你想做,我会感到惊讶。这可能就足够了:

INSERT INTO tableB(col1, . . .)
    SELECT col1, . . .
    FROM tableA a
    WHERE  A.date = '2015-01-27'
    ON DUPLICATE KEY UPDATE col1 = values(col1);

或许这个:

INSERT INTO tableB(col1, . . .)
    SELECT col1, . . .
    FROM tableA as A LEFT JOIN
         v2_opens as B
         ON A.id = B.id and A.emailid = B.emailid
    WHERE A.date = '2015-01-27' AND B.id IS NULL;