ข้อผิดพลาดทางไวยากรณ์ SQL เมื่อใช้ INTERSECT ในแบบสอบถาม UPDATE

ฉันมีสองแบบสอบถามที่ทำงานอยู่ แบบสอบถามหนึ่งเพื่อค้นหารายการที่ตรงกันภายในฐานข้อมูล และแบบสอบถามที่สองซึ่งจะอัปเดตคอลัมน์ในฐานข้อมูล ข้อความค้นหาจะเหมือนกันทุกประการ ยกเว้นข้อความหนึ่งเป็นคำสั่ง SELECT และอีกข้อความหนึ่งเป็นคำสั่ง UPDATE ไวยากรณ์ในส่วนคำสั่ง WHERE จะเหมือนกันทุกประการในทั้งสองแบบสอบถาม และคำสั่ง SELECT จะค้นหาผลลัพธ์ที่ถูกต้องทั้งหมดโดยไม่มีปัญหาหรือข้อผิดพลาดทางไวยากรณ์ แบบสอบถามที่สองให้ข้อผิดพลาดนี้:

ข้อผิดพลาด: ใกล้ "INTERSECT": ข้อผิดพลาดทางไวยากรณ์

:

นี่คือแบบสอบถาม SELECT:

SELECT * FROM StudentInfo 
    WHERE FirstLanguageToOffer = 'French' 
    OR SecondLanguageToOffer = 'French'
    OR ThirdLanguageToOffer = 'French'
    INTERSECT 
    SELECT * FROM StudentInfo WHERE Gender = 'Female'
    INTERSECT
    SELECT * FROM StudentInfo WHERE MaxPartners > CurrentPartners
    INTERSECT
    SELECT * FROM StudentInfo WHERE Preference ='Male' OR Preference = 'It doesnt matter'
    INTERSECT
    SELECT * FROM StudentInfo WHERE LanguageToPractice ='English'
    ORDER BY Priority
    LIMIT 1;

นี่คือแบบสอบถาม UPDATE:

UPDATE StudentInfo SET CurrentPartners = CurrentPartners -1  
    WHERE FirstLanguageToOffer = 'French' 
    OR SecondLanguageToOffer = 'French'
    OR ThirdLanguageToOffer = 'French'
    INTERSECT 
    SELECT * FROM StudentInfo WHERE Gender = 'Female'
    INTERSECT
    SELECT * FROM StudentInfo WHERE MaxPartners > CurrentPartners
    INTERSECT
    SELECT * FROM StudentInfo WHERE Preference ='Male' OR Preference = 'It doesnt matter'
    INTERSECT
    SELECT * FROM StudentInfo WHERE LanguageToPractice ='English'
    ORDER BY Priority
    LIMIT 1;

ไม่มีใครรู้ว่าอะไรทำให้เกิดปัญหานี้? การดำเนินการ INTERSECT ไม่รองรับในการสืบค้น UPDATE หรือไม่ ฉันใช้ SQLite


person MikeyJ    schedule 22.03.2017    source แหล่งที่มา


คำตอบ (1)


INTERSECT ไม่มีความหมายใด ๆ ในแง่ของการอัปเดต จริงๆ แล้ว แบบสอบถาม SELECT ของคุณคือ ห้า แบบสอบถามอิสระที่ทำงานพร้อมกัน เพื่อส่งคืนจุดตัดของชุดผลลัพธ์อิสระทั้งห้าชุด เนื่องจาก UPDATE ไม่ได้สร้างชุดผลลัพธ์ จึงเป็นข้อผิดพลาดในการพยายามตัดส่วนที่ไม่ใช่ผลลัพธ์กับผลลัพธ์ของข้อความค้นหา SELECT

ดูเหมือนว่าจุดประสงค์เดิมของคุณน่าจะให้บริการได้ดีกว่าด้วยแบบสอบถาม SELECT เดียวที่มีส่วนคำสั่ง WHERE ที่ซับซ้อน เนื่องจากแต่ละแบบสอบถามจากห้าแบบสอบถามนั้นทำงานบนตารางเดียวกันโดยตรวจสอบเงื่อนไขที่แตกต่างกัน

person dmfay    schedule 22.03.2017
comment
อ่า ขอบคุณนะ มันสมเหตุสมผลดี ฉันจะเขียนคำสั่งใหม่เพื่อให้เป็น WHERE เดียว ไม่สนใจ ฉันสามารถใช้ INTERSECT ได้หรือไม่ หากฉันมีการดำเนินการ UPDATE หลายรายการ - person MikeyJ; 23.03.2017
comment
หมายเลข INTERSECT, UNION, EXCEPT และอื่นๆ เป็นการดำเนินการทางคณิตศาสตร์ซึ่งใช้ได้กับเซตเท่านั้น และวิธีที่คุณอธิบายเซตใน SQL ก็คือผ่าน SELECT การพยายามหาจุดตัดกันของเซตที่ไม่ใช่เซตก็เหมือนกับการพยายามคูณประโยค - person dmfay; 23.03.2017