Kesalahan Sintaks SQL saat menggunakan INTERSECT dalam kueri UPDATE

Saya menjalankan dua kueri, satu untuk menemukan kecocokan dalam database, dan kueri kedua yang kemudian memperbarui kolom dalam database. Kuerinya persis sama, kecuali yang satu adalah pernyataan SELECT dan yang lainnya adalah pernyataan UPDATE. Sintaks dalam klausa WHERE sama persis di kedua kueri, dan pernyataan SELECT menemukan semua hasil yang benar tanpa masalah atau kesalahan sintaksis. Kueri kedua memberikan kesalahan ini:

KESALAHAN: dekat "INTERSECT": kesalahan sintaksis

:

Ini adalah kueri 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;

Ini adalah permintaan 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;

Adakah yang tahu apa yang menyebabkan masalah ini? Apakah operasi INTERSECT tidak didukung dalam kueri UPDATE? Saya menggunakan SQLite.


person MikeyJ    schedule 22.03.2017    source sumber


Jawaban (1)


INTERSECT tidak memiliki arti apa pun dalam hal pembaruan. Kueri SELECT Anda sebenarnya adalah lima kueri independen yang dijalankan secara bersamaan untuk mengembalikan perpotongan dari lima rangkaian hasil independen. Karena UPDATE tidak menghasilkan kumpulan hasil, merupakan kesalahan jika mencoba memotong hasil yang bukan hasil dengan hasil kueri SELECT.

Sepertinya tujuan awal Anda akan lebih baik dilayani dengan satu kueri SELECT dengan klausa WHERE yang kompleks, karena masing-masing dari lima kueri berjalan pada tabel yang sama dan memeriksa kondisi yang berbeda.

person dmfay    schedule 22.03.2017
comment
Ahhhh, terima kasih, itu masuk akal. Saya akan menulis ulang pernyataannya sehingga menjadi satu WHERE. Karena minat, bisakah saya menggunakan INTERSECT jika saya memiliki beberapa operasi UPDATE? - person MikeyJ; 23.03.2017
comment
No. INTERSECT, UNION, EXCEPT, dan seterusnya adalah operasi matematika yang hanya bekerja pada himpunan, dan cara Anda mendeskripsikan himpunan dalam SQL adalah melalui SELECT. Mencoba mengambil perpotongan non-himpunan sama seperti mencoba mengalikan kalimat. - person dmfay; 23.03.2017