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