Saya mencoba memahami cara MEMPERBARUI beberapa baris dengan nilai berbeda dan saya tidak mengerti. Solusinya ada di mana-mana tetapi bagi saya tampaknya sulit untuk dipahami.
Misalnya, tiga pembaruan menjadi 1 kueri:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
Saya membaca sebuah contoh, tetapi saya benar-benar tidak mengerti cara membuat kueri. yaitu:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Saya tidak sepenuhnya jelas bagaimana melakukan kueri jika ada beberapa kondisi di WHERE dan dalam kondisi IF..Ada ide?
mysql
sql
sql-update
franvergara66
sumber
sumber
Jawaban:
Anda bisa melakukannya dengan cara ini:
UPDATE table_users SET cod_user = (case when user_role = 'student' then '622057' when user_role = 'assistant' then '2913659' when user_role = 'admin' then '6160230' end), date = '12082014' WHERE user_role in ('student', 'assistant', 'admin') AND cod_office = '17389551';
Saya tidak mengerti format tanggal Anda. Tanggal harus disimpan dalam database menggunakan jenis tanggal dan waktu asli.
sumber
update
s hanya mempengaruhi rekaman yang sudah ada.cod_user
adalah kunci utama dan nilainya sedang diubah-ubah, maka beberapa pembaruan mungkin merupakan rute terbaik.MySQL memungkinkan cara yang lebih mudah dibaca untuk menggabungkan beberapa pembaruan menjadi satu kueri. Ini tampaknya lebih cocok dengan skenario yang Anda gambarkan, jauh lebih mudah dibaca, dan menghindari beberapa kondisi yang sulit diuraikan.
INSERT INTO table_users (cod_user, date, user_rol, cod_office) VALUES ('622057', '12082014', 'student', '17389551'), ('2913659', '12082014', 'assistant','17389551'), ('6160230', '12082014', 'admin', '17389551') ON DUPLICATE KEY UPDATE cod_user=VALUES(cod_user), date=VALUES(date)
Ini mengasumsikan bahwa
user_rol, cod_office
kombinasi tersebut adalah kunci utama. Jika hanya salah satu dari ini yang merupakan kunci utama , tambahkan bidang lainnya ke daftar PEMBARUAN. Jika tidak satu pun dari mereka adalah kunci utama (yang tampaknya tidak mungkin) maka pendekatan ini akan selalu membuat catatan baru - mungkin bukan yang diinginkan.Namun, pendekatan ini membuat pernyataan yang disiapkan lebih mudah dibuat dan lebih ringkas.
sumber
cod_user=VALUES(cod_user), ...
, bahkan dari dokumen resmi MySQL 5.6Anda dapat menggunakan
CASE
pernyataan untuk menangani beberapa skenario if / then:UPDATE table_to_update SET cod_user= CASE WHEN user_rol = 'student' THEN '622057' WHEN user_rol = 'assistant' THEN '2913659' WHEN user_rol = 'admin' THEN '6160230' END ,date = '12082014' WHERE user_rol IN ('student','assistant','admin') AND cod_office = '17389551';
sumber
update table_name set cod_user = CASE WHEN user_rol = 'student' THEN '622057' WHEN user_rol = 'assistant' THEN '2913659' WHEN user_rol = 'admin' THEN '6160230'? END,date = '12082014' WHERE user_rol IN ('student','assistant','admin') AND cod_office = '17389551';
sumber
Untuk Memperluas jawaban @Trevedhek ,
Jika pembaruan harus dilakukan dengan kunci non-unik, 4 kueri akan dibutuhkan
CATATAN: Ini tidak aman untuk transaksi
Ini dapat dilakukan dengan menggunakan tabel temp.
Langkah 1: Buat kunci tabel temp dan kolom yang ingin Anda perbarui
CREATE TEMPORARY TABLE temp_table_users ( cod_user varchar(50) , date varchar(50) , user_rol varchar(50) , cod_office varchar(50) ) ENGINE=MEMORY
Langkah 2: Masukkan nilai ke dalam tabel temp
Langkah 3: Perbarui tabel asli
UPDATE table_users t1 JOIN temp_table_users tt1 using(user_rol,cod_office) SET t1.cod_office = tt1.cod_office t1.date = tt1.date
Langkah 4: Jatuhkan tabel temp
sumber
UPDATE Table1 SET col1= col2 FROM (SELECT col2, col3 FROM Table2) as newTbl WHERE col4= col3
Berikut col4 & col1 ada di Table1. col2 & col3 ada di Tabel2
Saya mencoba memperbarui setiap col1 di mana col4 = col3 nilai berbeda untuk setiap baris
sumber
Saya melakukannya dengan cara ini:
<update id="updateSettings" parameterType="PushSettings"> <foreach collection="settings" item="setting"> UPDATE push_setting SET status = #{setting.status} WHERE type = #{setting.type} AND user_id = #{userId}; </foreach> </update>
di mana PushSettings berada
itu bekerja dengan baik
sumber