INSERT INTO 不重复

Aar*_*son 6 mysql insert upsert

我想做这个

INSERT INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix 
Run Code Online (Sandbox Code Playgroud)

但我不想创建重复项。即,我几周前运行了它并且需要更新数据。

Rol*_*DBA 7

这将插入以前不在矩阵表中的新名称字段。

INSERT IGNORE
INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix;
Run Code Online (Sandbox Code Playgroud)

如果您不信任INSERT IGNORE,还有一种替代方法,您可以在插入它们之前显示新的 Name 值:

CREATE TABLE NewName SELECT Name FROM Matrix WHERE 1=2;
INSERT INTO NewName
    SELECT Name FROM AdminAccounts A
    LEFT JOIN Matrix B USING (Name)
    WHERE B.Name IS NULL;
INSERT INTO Matrix (Name) SELECT Name FROM NewNames;
Run Code Online (Sandbox Code Playgroud)

该表NewName仅收集AdminAccounts当前不在的那些表Matrix。这可以让您有机会查看新名称。之后,您可以将所有内容NewName插入到 Matrix 中。


Aar*_*son 6

INSERT INTO AdminAccounts 
    (Name)
SELECT t1.name
  FROM Matrix t1
 WHERE NOT EXISTS(SELECT id
                    FROM AdminAccounts t2
                   WHERE t2.Name = t1.Name)
Run Code Online (Sandbox Code Playgroud)