sql >> Database >  >> RDS >> SQLite

Fix Error:"SELECT's links en rechts van UNION hebben niet hetzelfde aantal resultaatkolommen" in SQLite

Als u "Fout:in voorbereiding, SELECT's links en rechts van UNION hebben niet hetzelfde aantal resultaatkolommen..." krijgt wanneer u de UNION probeert te gebruiken operator in SQLite, komt dit omdat een van de SELECT statements retourneert meer kolommen dan de andere.

Wanneer u de UNION . gebruikt operator, beide SELECT statements moeten hetzelfde aantal kolommen retourneren.

Om dit probleem op te lossen, zorgt u ervoor dat de SELECT instructies geven hetzelfde aantal kolommen terug.

Voorbeeld van fout

Hier is een voorbeeld van SQL-code die de fout veroorzaakt:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Resultaat:

Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)

Hier, de eerste SELECT statement retourneert één kolom (TeacherName ), maar de tweede SELECT statement retourneert twee kolommen (StudentId en StudentName ).

Oplossing

De manier om dit probleem op te lossen is ervoor te zorgen dat zowel SELECT instructies geven hetzelfde aantal kolommen terug

Dus door het bovenstaande voorbeeld te gebruiken, kunnen we ofwel de extra kolom verwijderen uit onze tweede SELECT verklaring:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultaat:

TeacherName
-----------
Ben        
Bill       
Cathy      
Ein        
Faye       
Jet        
Spike      
Warren     

Of we kunnen een andere kolom toevoegen aan de eerste SELECT verklaring:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Resultaat:

TeacherId  TeacherName
---------  -----------
1          Faye       
1          Warren     
2          Ben        
2          Jet        
3          Cathy      
3          Spike      
4          Cathy      
4          Ein        
5          Bill       
5          Warren     
6          Bill       

Houd er rekening mee dat u verschillende resultaten kunt krijgen, afhankelijk van de optie die u kiest. Dit komt omdat UNION retourneert standaard verschillende rijen. Wanneer we nog een kolom toevoegen, bestaat de mogelijkheid dat een eerder dubbele rij nu een unieke rij wordt, afhankelijk van de waarde in de extra kolom.

We kunnen ook UNION ALL . gebruiken , die dubbele waarden retourneert:

SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;

Resultaat:

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. Mogelijk om Oracle Database-objecttypen binnen PL/SQL te maken?

  2. Oracle subquery grappig

  3. Hoe de Sign()-functie werkt in PostgreSQL

  4. MariaDB JSON_TABLE() uitgelegd