MySQL 从另一个表中插入不重复的内容

标签 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:键 q3 的重复条目“xxxx”

我也尝试过:

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 错误。

任何帮助或建议将非常感激。

最佳答案

我认为你只想选择不同的:

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);

该子句本质上是一个无操作——什么也没做,但唯一索引中的错误被忽略。

关于MySQL 从另一个表中插入不重复的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38689443/

相关文章:

PHP 加载 UniqieID 的 MySQL 列然后更新列

MySQL 选择随机 X 条目 - 优化

MySQL - 从每个月中选择前 100 条记录

MySQL where IN from joined table

MYSQL 错误#2014 : in stored procedure when resultset is empty

php - 数组推送,期望参数 1 为数组但给定为 null

php - 制作搜索引擎时出现PHP警告

java - 如何在java程序中使用它后将其标记为死行或已使用

mysql - 使用 MySQL 的 SQL 语句的正确语法是什么

php - 如何使用php从不同的行中获取相同的值