it-swarm.asia

INSERT INTO بدون تكرارات

اريد فعل هذا

INSERT INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix 

لكني لا أريد إنشاء نسخ مكررة. أي ، لقد أجريت هذا قبل بضعة أسابيع وأحتاج إلى تحديث البيانات.

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

سيؤدي هذا إلى إدراج حقول الاسم الجديدة التي لم تكن موجودة مسبقًا في جدول المصفوفة.

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

إذا كنت لا تثق INSERT IGNORE ، هناك بديل حيث يمكنك إظهار قيم الاسم الجديدة قبل إدراجها:

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.

7
RolandoMySQLDBA

إذا جعلت حقل "الاسم" في "AdminAccounts" مفتاحًا أساسيًا أو فهرسًا فريدًا ، يمكنك ببساطة استخدامه

REPLACE INTO AdminAccounts (Name) 
SELECT Name
FROM Matrix 

وبالتالي ، إذا لم يكن هناك اسم في الجدول ، فسيتم إدراجه ؛ إذا كان موجودًا ، يتم حذف الصف القديم وإدراج الصف الجديد.

0
cihat atsever