SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Correção de erro:“SELECTs à esquerda e direita de UNION não possuem o mesmo número de colunas de resultado” no SQLite


Se você está recebendo "Erro:em preparação, SELECTs à esquerda e à direita de UNION não têm o mesmo número de colunas de resultado..." ao tentar usar o UNION operador no SQLite, é porque um dos SELECT declarações está retornando mais colunas do que o outro.

Quando você usa o UNION operador, ambos SELECT instruções devem retornar o mesmo número de colunas.

Para corrigir esse problema, certifique-se de que o SELECT instruções retornam o mesmo número de colunas.

Exemplo de erro


Aqui está um exemplo de código SQL que produz o erro:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; 

Resultado:
Erro:na preparação, SELECTs à esquerda e à direita de UNION não possuem o mesmo número de colunas de resultado (1)

Aqui, o primeiro SELECT retorna uma coluna (TeacherName ), mas o segundo SELECT retorna duas colunas (StudentId e StudentName ).

Solução


A maneira de corrigir esse problema é garantir que SELECT instruções retornam o mesmo número de colunas

Então, usando o exemplo acima, podemos remover a coluna extra do nosso segundo SELECT demonstração:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students; 

Resultado:
Nome do Professor-----------Ben Bill Cathy Ein Faye Jet Spike Warren 

Ou podemos adicionar outra coluna ao primeiro SELECT demonstração:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; 

Resultado:
ProfessorId TeacherName --------- -----------1 Faye 1 Warren 2 Ben 2 Jet 3 Cathy 3 Spike 4 Cathy 4 Ein 5 Bill 5 Warren 6 Bill 
>
Tenha em mente que você pode obter resultados diferentes dependendo da opção escolhida. Isso ocorre porque UNION retorna linhas distintas por padrão. Quando adicionamos outra coluna, existe a possibilidade de que uma linha anteriormente duplicada agora se torne uma linha única, dependendo do valor da coluna extra.

Também podemos usar UNION ALL , que retorna valores duplicados:
SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students; 

Resultado:
ProfessorId 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