Saya dapat menggunakan CASE
untuk memilih kolom mana yang akan ditampilkan dalam SELECT
kueri (Postgres), seperti:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
Apakah mungkin ada yang serupa ketika melakukan UPDATE
kueri di Postgres (yaitu memilih kolom mana yang harus diperbarui)? Saya berasumsi tidak karena saya tidak dapat menemukan apa pun tentang ini, tetapi mungkin seseorang memiliki alternatif yang cerdas (selain menggunakan prosedur atau memperbarui setiap kolom menggunakan a CASE
untuk menentukan apakah nilai kolom harus diberi nilai baru atau hanya menetapkan kembali yang sudah ada nilai). Jika tidak ada alternatif yang mudah, tentu saja saya akan menerimanya sebagai jawaban juga.
Info tambahan : Dalam kasus saya, saya memiliki 14 kolom potensial yang dapat diperbarui, dengan hanya satu yang diperbarui per baris yang cocok (tabel yang akan diperbarui bergabung dengan yang lain dalam kueri). Jumlah baris yang akan diperbarui kemungkinan besar akan bervariasi, bisa puluhan atau ratusan. Saya percaya indeks sudah siap untuk kondisi bergabung.
sumber
Berapa banyak kombinasi kolom yang berbeda untuk diperbarui yang Anda miliki? Berapa banyak baris dari seluruh tabel akan diperbarui? Apakah ada indeks untuk akses cepat ke baris yang diperbarui?
Bergantung pada jawaban untuk pertanyaan-pertanyaan ini, Anda mungkin dapat menjalankan beberapa pernyataan pembaruan, satu untuk setiap kolom yang ingin Anda perbarui dan menempatkan kondisi pada nilai kolom itu di mana klausa pembaruan sehingga nol baris diperbarui jika kolom itu diperbarui memiliki nilai yang salah.
Coba dan pikirkan berbasis set, jangan menganggap bahwa pembaruan perlu memperbarui satu baris yang ditemukan oleh kunci utama.
sumber
sumber