Ao executar uma consulta que utiliza o operador UNION, é imperativo garantir que todas as instruções SELECT individuais envolvidas cumpram dois critérios fundamentais:
Considerando a consulta fornecida:
SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 a mensagem de erro indica uma discrepância na contagem de colunas entre as duas instruções SELECT unidas por UNION. Especificamente, a primeira instrução SELECT retorna todas as colunas das tabelas envolvidas, enquanto a segunda busca apenas a coluna fid2.
Solução
Para resolver esse problema, a segunda instrução SELECT deve ser modificada para corresponder à contagem de colunas da primeira instrução. A abordagem mais fácil é incluir explicitamente todas as colunas desejadas:
SELECT f.*, u.*
FROM FRIENDS AS f
JOIN USERS AS u ON u.uid = f.fid2
WHERE f.fid1 = 1
AND f.fid2 > 1
UNION
SELECT f.*, u.*
FROM FRIENDS AS f
JOIN USERS AS u ON u.uid = f.fid1
WHERE f.fid2 = 1
AND f.fid1 Alternativamente, pode-se usar o operador UNION ALL, que permite instruções SELECT com contagens de colunas variadas. No entanto, as colunas incompatíveis serão preenchidas com valores NULL, o que pode não ser desejável em todos os casos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3