これをやりたい
INSERT INTO AdminAccounts (Name)
SELECT Name
FROM Matrix
しかし、私は複製を作成したくありません。つまり、これを数週間前に実行し、データを更新する必要があります。
INSERT INTO AdminAccounts
(Name)
SELECT t1.name
FROM Matrix t1
WHERE NOT EXISTS(SELECT id
FROM AdminAccounts t2
WHERE t2.Name = t1.Name)
これにより、以前にマトリックステーブルになかった新しい名前フィールドが挿入されます。
INSERT IGNORE
INTO AdminAccounts (Name)
SELECT Name
FROM Matrix;
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;
テーブルNewName
は、現在AdminAccounts
にないMatrix
のテーブルのみを収集します。これにより、新しい名前を確認できます。その後、NewName
のすべてをMatrixに挿入できます。
「AdminAccounts」の「name」フィールドを主キーまたは一意のインデックスにした場合、次のように使用できます
REPLACE INTO AdminAccounts (Name)
SELECT Name
FROM Matrix
したがって、テーブルに名前が存在しない場合は挿入されます。存在する場合は、古い行が削除され、新しい行が挿入されます。