Om du får "Error:in prepare, SELECTs till vänster och höger om UNION har inte samma antal resultatkolumner..." när du försöker använda UNION
operatorn i SQLite, beror det på att en av SELECT
uttalanden returnerar fler kolumner än de andra.
När du använder UNION
operator, båda SELECT
satser måste returnera samma antal kolumner.
För att åtgärda det här problemet, se till att SELECT
satser returnerar samma antal kolumner.
Exempel på fel
Här är ett exempel på SQL-kod som ger felet:
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)
Här är den första SELECT
uttalande returnerar en kolumn (TeacherName
), men den andra SELECT
uttalande returnerar två kolumner (StudentId
och StudentName
).
Lösning
Sättet att åtgärda problemet är att säkerställa både SELECT
satser returnerar samma antal kolumner
Så med exemplet ovan kan vi antingen ta bort den extra kolumnen från vår andra SELECT
uttalande:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Resultat:
TeacherName ----------- Ben Bill Cathy Ein Faye Jet Spike Warren
Eller så kan vi lägga till ytterligare en kolumn till den första SELECT
uttalande:
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>
Tänk på att du kan få olika resultat beroende på vilket alternativ du väljer. Detta beror på att UNION
returnerar distinkta rader som standard. När vi lägger till ytterligare en kolumn finns det en möjlighet att en tidigare duplicerad rad nu blir en unik rad, beroende på värdet i den extra kolumnen.
Vi kan också använda UNION ALL
, som returnerar dubbletter av värden:
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