Hvis du får "Fejl:under forberedelse, SELECT'er til venstre og højre for UNION har ikke det samme antal resultatkolonner...", når du forsøger at bruge UNION
operator i SQLite, er det fordi en af SELECT
udsagn returnerer flere kolonner end de andre.
Når du bruger UNION
operator, begge SELECT
udsagn skal returnere det samme antal kolonner.
For at løse dette problem skal du sørge for SELECT
sætninger returnerer det samme antal kolonner.
Eksempel på fejl
Her er et eksempel på SQL-kode, der producerer fejlen:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Resultat:
Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)
Her er den første SELECT
sætning returnerer én kolonne (TeacherName
), men den anden SELECT
sætning returnerer to kolonner (StudentId
og StudentName
).
Løsning
Måden at løse dette problem på er at sikre både SELECT
udsagn returnerer det samme antal kolonner
Så ved at bruge ovenstående eksempel kan vi enten fjerne den ekstra kolonne fra vores anden SELECT
erklæring:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Resultat:
TeacherName ----------- Ben Bill Cathy Ein Faye Jet Spike Warren
Eller vi kan tilføje endnu en kolonne til den første SELECT
erklæring:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Resultat:
TeacherId TeacherName --------- ----------- 1 Faye 1 Warren 2 Ben 2 Jet 3 Cathy 3 Spike 4 Cathy 4 Ein 5 Bill 5 Warren 6 Bill>
Husk, at du kan få forskellige resultater afhængigt af, hvilken mulighed du vælger. Dette er fordi UNION
returnerer adskilte rækker som standard. Når vi tilføjer endnu en kolonne, er der mulighed for, at en tidligere dublet række nu bliver en unik række, afhængigt af værdien i den ekstra kolonne.
Vi kan også bruge UNION ALL
, som returnerer duplikerede værdier:
SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;
Resultat:
TeacherId TeacherName --------- ----------- 1 Warren 2 Ben 3 Cathy 4 Cathy 5 Bill 6 Bill 1 Faye 2 Jet 3 Spike 4 Ein 5 Warren 6 Bill