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.
INSERT INTO AdminAccounts
(Name)
SELECT t1.name
FROM Matrix t1
WHERE NOT EXISTS(SELECT id
FROM AdminAccounts t2
WHERE t2.Name = t1.Name)
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.
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.