Saya ingin memperbarui beberapa baris dalam PostgreSQL dalam satu pernyataan. Apakah ada cara untuk melakukan sesuatu seperti yang berikut ini?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
sql
postgresql
newUserNameHere
sumber
sumber
Jawaban:
Anda juga dapat menggunakan
update ... from
sintaks dan menggunakan tabel pemetaan. Jika Anda ingin memperbarui lebih dari satu kolom, itu jauh lebih digeneralisasikan:Anda dapat menambahkan kolom sebanyak yang Anda suka:
sql fiddle demo
sumber
... from (values ('2014-07-21'::timestamp, 1), ('2014-07-20', 2), ...
Rincian lebih lanjut di Dokumentasi PostgreSQLBerdasarkan solusi @Roman, Anda dapat mengatur beberapa nilai:
sumber
from (values $1)
Di mana $ 1 adalah array struct. Dalam kasus di atas, ketat akan memiliki id, first_name dan last_name sebagai properti.Ya kamu bisa:
Dan bukti kerja: http://sqlfiddle.com/#!2/97c7ea/1
sumber
'123'
juga'345'
. Anda harus menggunakanWHERE column_b IN ('123','456')
...'456'
seharusnya'345'
ELSE column_b
setelahWHEN ? THEN ?
baris terakhir maka kolom akan diatur ke nilai saat ini, sehingga mencegah apa yang dikatakan MatheusQI akan terjadi.Datang di skenario yang sama dan ekspresi KASUS berguna bagi saya.
Laporan - adalah tabel di sini, account_id sama dengan report_ids yang disebutkan di atas. Query di atas akan menetapkan 1 record (yang cocok dengan kondisi) menjadi true dan semua yang tidak cocok dengan false.
sumber
Untuk memperbarui beberapa baris dalam satu permintaan, Anda dapat mencoba ini
jika Anda tidak memerlukan kondisi tambahan maka hapus
and
bagian dari permintaan inisumber
Katakanlah Anda memiliki array ID dan array status yang setara - di sini adalah contoh bagaimana melakukan ini dengan SQL statis (kueri sql yang tidak berubah karena nilai yang berbeda) dari array:
sumber