Saya memiliki dua tabel berikut:
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
Saya perlu memasukkan data dari Table1
hingga Table2
. Saya dapat menggunakan sintaks berikut:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Namun, dalam kasus saya, ID duplikat mungkin ada Table2
(dalam kasus saya, ini hanya " 1
") dan saya tidak ingin menyalinnya lagi karena itu akan menimbulkan kesalahan.
Saya bisa menulis sesuatu seperti ini:
IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1
Apakah ada cara yang lebih baik untuk melakukan ini tanpa menggunakan IF - ELSE
? Saya ingin menghindari dua INSERT INTO-SELECT
pernyataan berdasarkan beberapa kondisi.
sql
sql-server
tsql
sql-insert
Ashish Gupta
sumber
sumber
NOT EXISTS
sangat berguna dengan kunci primer komposit,NOT IN
tidak akan berfungsi saat ituDi MySQL, Anda dapat melakukan ini:
Apakah SQL Server memiliki kesamaan?
sumber
Saya baru saja mengalami masalah serupa, kata kunci DISTINCT bekerja dengan ajaib:
sumber
insert into
tabel.Saya menghadapi masalah yang sama baru-baru ini ...
Inilah yang berhasil untuk saya di MS SQL server 2017 ...
Kunci utama harus ditetapkan pada ID di tabel 2 ...
Properti kolom dan kolom harus sama tentu saja antara keduanya tabel. Ini akan berfungsi saat pertama kali Anda menjalankan skrip di bawah ini. ID duplikat di tabel 1, tidak akan dimasukkan ...
Jika Anda menjalankannya untuk kedua kalinya, Anda akan mendapatkan file
Ini kodenya:
sumber
Menggunakan
ignore Duplicates
indeks unik seperti yang disarankan oleh IanC di sini adalah solusi saya untuk masalah serupa, membuat indeks dengan OptionWITH IGNORE_DUP_KEY
Ref .: opsi_indeks
sumber
Dari SQL Server Anda dapat mengatur indeks kunci unik pada tabel untuk (Kolom yang harus unik)
sumber
Sedikit keluar dari topik, tetapi jika Anda ingin memindahkan data ke tabel baru, dan kemungkinan duplikat ada di tabel asli , dan kolom yang mungkin digandakan bukan id, a
GROUP BY
akan melakukan:sumber
Sederhana
DELETE
sebelumINSERT
sudah cukup:Switching
Table1
untukTable2
tergantung pada tabelId
danname
pasangan Anda ingin melestarikan.sumber