Saya memiliki database dengan account numbers
dan card numbers
. Saya mencocokkan ini dengan file ke update
nomor kartu apa saja dengan nomor akun, sehingga saya hanya bekerja dengan nomor akun.
Saya membuat tampilan yang menghubungkan tabel ke database akun / kartu untuk mengembalikan Table ID
dan nomor akun terkait, dan sekarang saya perlu memperbarui catatan-catatan di mana ID cocok dengan Nomor Akun.
Ini adalah Sales_Import
tabel, di mana account number
bidang perlu diperbarui:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
Dan ini adalah RetrieveAccountNumber
tabel, tempat saya perlu memperbarui dari:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Saya mencoba di bawah ini, tetapi tidak berhasil sejauh ini:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Ini memperbarui nomor kartu ke nomor akun, tetapi nomor akun diganti oleh NULL
sumber
SI.AccountNumber
ke hanyaAccountNumber
sebaliknya itu akan gagal.UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
. Agak topik tapi mungkin membantuCara sederhana untuk menyalin konten dari satu tabel ke tabel lainnya adalah sebagai berikut:
Anda juga dapat menambahkan ketentuan untuk menyalin data tertentu.
sumber
Untuk SQL Server 2008 + Menggunakan
MERGE
daripada milikUPDATE ... FROM
sintaksis memiliki beberapa daya tarik.Serta menjadi SQL standar dan dengan demikian lebih portabel juga akan meningkatkan kesalahan jika ada beberapa baris yang bergabung di sisi sumber (dan dengan demikian beberapa kemungkinan nilai yang berbeda untuk digunakan dalam pembaruan) daripada memiliki hasil akhir yang tidak ditentukan. .
Sayangnya pilihan yang akan digunakan mungkin tidak sepenuhnya turun ke gaya yang disukai. Implementasi
MERGE
dalam SQL Server telah mengalami berbagai bug. Aaron Bertrand telah menyusun daftar yang dilaporkan di sini .sumber
MERGE
.Jawaban umum untuk pengembang masa depan.
SQL Server
Oracle (dan SQL Server)
MySQL
sumber
update t1...
bukanupdate Table1...
)Untuk PostgreSQL:
sumber
Sepertinya Anda menggunakan MSSQL, maka, jika saya ingat dengan benar, dilakukan seperti ini:
sumber
Saya memiliki masalah yang sama dengan
foo.new
diatur kenull
untuk barisfoo
yang tidak memiliki kunci yang cocokbar
. Saya melakukan sesuatu seperti ini di Oracle:sumber
Untuk MySql yang berfungsi dengan baik:
sumber
Inilah yang bekerja untuk saya di SQL Server:
sumber
Terima kasih atas tanggapannya. Saya menemukan solusi untuk itu.
sumber
Dalam hal tabel berada dalam database yang berbeda. (MSSQL)
sumber
Gunakan blok permintaan berikut untuk memperbarui Table1 dengan Table2 berdasarkan ID:
Ini adalah cara termudah untuk mengatasi masalah ini.
sumber
MS Sql
Oracle 11g
sumber
perbarui dalam tabel yang sama:
sumber
Seseorang SQL di bawah ini menyarankan, TIDAK bekerja di SQL Server. Sintaks ini mengingatkan saya pada kelas sekolah lama saya:
Semua pertanyaan lain menggunakan
NOT IN
atauNOT EXISTS
tidak direkomendasikan. NULLs muncul karena OP membandingkan seluruh dataset dengan subset yang lebih kecil, maka tentu saja akan ada masalah yang cocok. Ini harus diperbaiki dengan menulis SQL yang tepat dengan benarJOIN
alih-alih menghindari masalah dengan menggunakanNOT IN
. Anda mungkin mengalami masalah lain dengan menggunakanNOT IN
atauNOT EXISTS
dalam kasus ini.Pilihan saya untuk yang teratas, yang merupakan cara konvensional untuk memperbarui tabel berdasarkan tabel lain dengan bergabung dalam SQL Server. Seperti saya katakan, Anda tidak dapat menggunakan dua tabel dalam
UPDATE
pernyataan yang sama di SQL Server kecuali jika Anda bergabung terlebih dahulu.sumber
ia bekerja dengan postgresql
sumber
Saya pikir ini adalah contoh sederhana mungkin seseorang bisa lebih mudah,
sumber
Oracle 11g
sumber
Ini akan memungkinkan Anda untuk memperbarui tabel berdasarkan nilai kolom yang tidak ditemukan di tabel lain.
Ini akan memperbarui tabel berdasarkan nilai kolom yang ditemukan di kedua tabel.
sumber
coba ini :
sumber
Saya ingin menambahkan satu hal tambahan.
Jangan perbarui nilai dengan nilai yang sama, itu menghasilkan logging tambahan dan overhead yang tidak perlu. Lihat contoh di bawah - ini hanya akan melakukan pembaruan pada 2 catatan meskipun tertaut pada 3.
sumber
Jika jawaban di atas tidak berfungsi untuk Anda coba ini
sumber