SQL: Pernyataan tidak dikenal dekat kondisional (IF)

Saya belum pernah menggunakan IF sebelumnya di SQL. Saya perlu memperbarui baris di mana institusi adalah nomor tertentu jika ada dan memasukkannya jika tidak. Untuk menghindari penggunaan pilihan pertama dan kemudian penyisipan atau pembaruan, saya ingin mencoba pernyataan IF. Saya memperkirakan dari apa yang saya baca di dokumentasi bahwa seharusnya seperti ini:

IF (NOT EXISTS(SELECT evaluations FROM tEvaluations WHERE institution = 0))
BEGIN 
    INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
END 
ELSE 
BEGIN 
    UPDATE tEvaluations SET evaluations = 10 WHERE institution = 0
END

Namun saya mendapatkan kesalahan ini:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BEGIN
    INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
END' at line 2

Saya mencoba menjalankan kueri ini di phpmyadmin untuk menguji bagaimana seharusnya kueri tersebut.


person aarelovich    schedule 13.05.2020    source sumber
comment
DBMS mana yang Anda gunakan?   -  person jarlh    schedule 13.05.2020
comment
@jarlh phpmyadmin menerapkan MySQL - tetapi bisa juga MySQL 5 lama atau MySQL 8 modern - yang sangat berbeda satu sama lain.   -  person Dai    schedule 13.05.2020
comment
@jarlh Saya kira MySQL melihat pesan kesalahan periksa manual yang sesuai dengan server MariaDB Anda   -  person Rahul    schedule 13.05.2020
comment
Saya menggunakan MariaDB   -  person aarelovich    schedule 13.05.2020


Jawaban (1)


Anda tidak dapat memiliki blok if..else dalam pernyataan SQL normal kecuali blok tersebut berada di dalam blok prosedural. Bagi saya sepertinya Anda mencari INSERT ON DUPLICATE KEY UPDATE suka

INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
ON DUPLICATE KEY UPDATE evaluations = 10;

Berdasarkan dokumentasi, salah satu kolom Anda harus memiliki batasan UNIQUE yang ditentukan. Mengutip dari dokumentasi

Jika Anda menentukan klausa ON DUPLICATE KEY UPDATE dan baris yang akan disisipkan akan menyebabkan nilai duplikat dalam indeks UNIK atau PRIMARY KEY, maka UPDATE baris lama akan terjadi. Misalnya kolom a dinyatakan UNIK dan berisi nilai 1

person Rahul    schedule 13.05.2020
comment
Saya menjalankan kueri Anda dua kali. Sama seperti itu dan dimasukkan (0,0) dua kali. Daripada hanya sekali lalu update. Apakah saya perlu membuat batasan bahwa lembaga, evaluasi adalah pasangan yang unik atau semacamnya? - person aarelovich; 13.05.2020
comment
@aarelovich Ya, lihat edit di jawaban dan terlebih lagi, periksa dokumentasi yang ditautkan dalam jawaban untuk lebih jelasnya - person Rahul; 13.05.2020