sql >> Database teknologi >  >> RDS >> SQLite

Ret fejl:"SELECTs til venstre og højre for UNION har ikke det samme antal resultatkolonner" i SQLite

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      

  1. Kopiering af en række i den samme tabel uden at skulle indtaste de 50+ kolonnenavne (mens du skifter 2 kolonner)

  2. JSON_TYPE() – Få en JSON-værditype i MySQL

  3. SQL Server sp_msforeachtable brug til kun at vælge de tabeller, der opfylder en eller anden betingelse

  4. LEAD og LAG analytiske funktioner