MySQL插入没有来自另一个表的重复

时间:2016-08-01 00:06:06

标签: mysql

我有两个表,一个是空表,另一个是数据表。我想从另一个插入空的一个数据,没有重复。 表:

TABLE T1
    AutoNo INT NOT NULL AUTO_INCREMENT,
    p1 VARCHAR(20) NOT NULL,
    p2 VARCHAR(20) NOT NULL,
    PRIMARY KEY (AutoNo),
    UNIQUE KEY `ppp` (p1,p2) //this one is empty, no records

TABLE T2
    AutoNo INT NOT NULL AUTO_INCREMENT,
    q1 DATE NOT NULL,
    q2 TIME NOT NULL,
    q3 VARCHAR(40) NOT NULL,
    q4 VARCHAR(40) NOT NULL,
    PRIMARY KEY (AutoNo)

我需要的是使用q3和q4列,并放入p1和p2,但q3和q4的组合不能重复(第一次出现可以复制,其他不受欢迎)。

我用过:

INSERT INTO T1 (p1, p2)
SELECT q3, q4
FROM T2
LEFT JOIN T1 ON 
   T1.p1= T2.q3 AND
   T1.p2= T2.q4
WHERE T1.p1 IS NULL AND T1.p2 IS NULL;

对于这个我得到错误代码#1062:Duplicate entry 'xxxx' for key q3

我也尝试过:

INSERT INTO T1(p1, p2)
SELECT q3, q4
FROM T2
WHERE NOT EXISTS 
  (SELECT AutoNo FROM T1 
   WHERE T1.p1 = T2.q3 AND 
         T1.p2 = T2.q4);

我得到了同样的#1062:Duplicate entry 'xxxx' for key q3错误。

任何帮助或建议都是非常有必要的。

1 个答案:

答案 0 :(得分:1)

我想你只想要select distinct

INSERT INTO T1(p1, p2)
    SELECT DISTINCT q3, q4
    FROM T2;

NOT EXISTS版本未看到修改后的表格。它只能看到空表。

虽然我更喜欢上述内容,但另一种方法是使用ON DUPLICATE KEY UPDATE

INSERT INTO T1(p1, p2)
    SELECT q3, q4
    FROM T2
    ON DUPLICATE KEY UPDATE 13 = VALUES(13);

这个子句本质上是一个无操作 - 没有任何操作,但是忽略了唯一索引中的错误。