it-swarm.com.de

INSERT INTO ohne Duplikate

Ich möchte das machen

INSERT INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix 

Aber ich möchte keine Duplikate erstellen. Das heißt, ich habe dies vor ein paar Wochen ausgeführt und muss die Daten aktualisieren.

6
AaronJAnderson
INSERT INTO AdminAccounts 
    (Name)
SELECT t1.name
  FROM Matrix t1
 WHERE NOT EXISTS(SELECT id
                    FROM AdminAccounts t2
                   WHERE t2.Name = t1.Name)
5
AaronJAnderson

Dadurch werden neue Namensfelder eingefügt, die zuvor nicht in der Matrixtabelle enthalten waren.

INSERT IGNORE
INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix;

Wenn Sie INSERT IGNORE Nicht vertrauen, gibt es eine Alternative, bei der Sie die neuen Namenswerte manifestieren können, bevor Sie sie einfügen:

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;

Die Tabelle NewName sammelt nur die Tabellen in AdminAccounts, die derzeit nicht in Matrix enthalten sind. Dies kann Ihnen die Möglichkeit geben, sich die neuen Namen anzusehen. Anschließend können Sie alles in NewName in Matrix EINFÜGEN.

7
RolandoMySQLDBA

Wenn Sie das Feld "Name" in "AdminAccounts" zu einem Primärschlüssel oder einem eindeutigen Index machen, können Sie es einfach verwenden

REPLACE INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix 

Wenn in der Tabelle kein Name vorhanden ist, wird dieser eingefügt. Wenn es existiert, wird die alte Zeile gelöscht und die neue eingefügt.

0
cihat atsever