Anda menemukan bahwa kesalahan dalam suatu sistem telah salah menyebut pria (M) sebagai wanita (W) dan sebaliknya dalam database. Kolom hanya memungkinkan untuk satu karakter. Tanpa menggunakan tabel temp, tulis satu permintaan pembaruan untuk menyelesaikan ini.
Pertanyaan ini diajukan pada wawancara baru-baru ini yang saya lakukan, dan saya akan melakukan lebih banyak wawancara yang mungkin memiliki pertanyaan serupa sehingga saya ingin mendapatkan ide tentang bagaimana menangani hal ini.
Jawaban:
Anda ingin menggunakan
CASE
ekspresi dari beberapa tipe.Dalam SQL Server kode akan terlihat seperti ini:
Sunting: Sebagaimana dinyatakan dalam komentar (dan beberapa jawaban lainnya) ELSE tidak perlu jika Anda menempatkan klausa WHERE pada pernyataan.
Ini menghindari pembaruan yang tidak perlu. Yang penting dalam kedua kasus ini adalah untuk mengingat bahwa ada opsi selain M&W (NULL misalnya) dan Anda tidak ingin memasukkan informasi yang salah. Sebagai contoh:
Ini akan menggantikan NULL (atau jenis kelamin lain yang mungkin) sebagai 'M' yang tidak benar.
Beberapa opsi lain bisa jadi
Dan yang lebih ringkas
sumber
IIF()
denganIF()
dan itu akan bekerja di MySQL;)Di Oracle Anda bisa menggunakan KASUS seperti jawaban lain:
Anda juga dapat menggunakan DECODE:
sumber
Untuk beralih di antara hanya dua nilai, Anda juga bisa mencoba trik ini, yang tidak menggunakan
CASE
ekspresi (dengan asumsi Transact-SQL di sini):Bergantung pada nilai saat ini
Gender
,ASCII(Gender)
akan membatalkan salah satuASCII('M')
atauASCII('W')
, meninggalkan kode lain untuk diubah olehCHAR()
fungsi kembali ke karakter yang sesuai.Saya meninggalkan ini hanya untuk perbandingan. Meskipun opsi ini mungkin berpura-pura anggun, sebuah solusi yang menggunakan
CASE
ungkapan bisa dibilang lebih mudah dibaca dan dengan demikian lebih mudah dipertahankan, dan tentu saja akan lebih mudah diperluas ke lebih dari dua nilai.sumber
M
danW
dimasukkan dalam huruf besar untuk menghindari yang tak terduga7
atau `-` muncul dalam hasil.ASCII(Gender)
denganASCII(UPPER(Gender))
, yang kurang elegan, meskipun tidak banyak.WHERE
klausa?Anda dapat melakukannya dengan
case ... when
ekspresi:sumber
Saya akan menggunakan pembaruan dengan
case
ekspresi.sumber
Anda dapat melakukan pembaruan ini menggunakan
case
ekspresi.Saya sarankan menjalankan pernyataan pembaruan Anda dalam transaksi dan menambahkan kueri sederhana seperti:
untuk memeriksa hasil yang akan Anda dapatkan. Melakukan transaksi dengan rollback dan mengubahnya menjadi komitmen ketika hasil Anda sesuai dengan yang Anda harapkan.
sumber