SQL: คำสั่งที่ไม่รู้จักใกล้เงื่อนไข (IF)

ฉันไม่เคยใช้ IF มาก่อนใน SQL ฉันต้องอัปเดตแถวที่สถาบันเป็นหมายเลขเฉพาะ (หากมี) และแทรกเข้าไปหากไม่มี เพื่อหลีกเลี่ยงการใช้ตัวเลือกก่อนแล้วจึงแทรกหรืออัปเดต ฉันต้องการลองใช้คำสั่ง IF ฉันคิดจากสิ่งที่ฉันได้อ่านในเอกสารประกอบว่าควรมีลักษณะดังนี้:

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

อย่างไรก็ตาม ฉันได้รับข้อผิดพลาดนี้:

#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

ฉันกำลังพยายามเรียกใช้แบบสอบถามนี้ใน phpmyadmin เพื่อทดสอบว่าแบบสอบถามควรเป็นอย่างไร


person aarelovich    schedule 13.05.2020    source แหล่งที่มา
comment
คุณใช้ dbms ใด?   -  person jarlh    schedule 13.05.2020
comment
@jarlh phpmyadmin ใช้ MySQL - แต่อาจเป็น MySQL 5 รุ่นเก่าหรือ MySQL 8 สมัยใหม่ - ซึ่งแตกต่างกันมากในแต่ละคน   -  person Dai    schedule 13.05.2020
comment
@jarlh ฉันเดาว่า MySQL กำลังดูข้อความแสดงข้อผิดพลาด ตรวจสอบคู่มือที่สอดคล้องกับเซิร์ฟเวอร์ MariaDB ของคุณ   -  person Rahul    schedule 13.05.2020
comment
ฉันใช้ MariaDB   -  person aarelovich    schedule 13.05.2020


คำตอบ (1)


คุณไม่สามารถมี if..else บล็อกในคำสั่ง SQL ปกติได้ เว้นแต่จะอยู่ภายในบล็อกขั้นตอน สำหรับฉันดูเหมือนว่าคุณกำลังมองหา INSERT ON DUPLICATE KEY UPDATE ชอบ

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

ตามเอกสารประกอบ คอลัมน์ใดคอลัมน์หนึ่งของคุณควรกำหนดข้อจำกัด UNIQUE ไว้ อ้างอิงจากเอกสารประกอบ

หากคุณระบุคำสั่งย่อย ON DUPLICATE KEY UPDATE และแถวที่จะแทรกจะทำให้เกิดค่าที่ซ้ำกันในดัชนี UNIQUE หรือ PRIMARY KEY การอัปเดตของแถวเก่าจะเกิดขึ้น ตัวอย่างเช่น ถ้าคอลัมน์ a ถูกประกาศเป็น UNIQUE และมีค่าเป็น 1

person Rahul    schedule 13.05.2020
comment
ฉันเรียกใช้แบบสอบถามคุณสองครั้ง เช่นเดียวกับที่เป็นอยู่และมันแทรก (0,0) สองครั้ง แทนที่จะอัพเดทเพียงครั้งเดียวแล้ว ฉันจำเป็นต้องสร้างข้อจำกัดที่สถาบัน การประเมินเป็นคู่ที่มีเอกลักษณ์หรืออะไรทำนองนั้นหรือไม่? - person aarelovich; 13.05.2020
comment
@aarelovich ใช่ดูการแก้ไขในคำตอบและยิ่งกว่านั้นตรวจสอบเอกสารที่เชื่อมโยงในคำตอบเพื่อดูรายละเอียดเพิ่มเติม - person Rahul; 13.05.2020