ti-enxame.com

As instruções SELECT usadas têm um número diferente de colunas

Por exemplo, não sei quantas linhas em cada tabela existem e tento fazer o seguinte:

SELECT * FROM members 
UNION 
SELECT * FROM inventory

O que posso colocar no segundo SELECT em vez de * para remover este erro sem adicionar NULL 's?

12
good_evening

Coloque os nomes das colunas explicitamente em vez de * e verifique se o número de colunas e tipos de dados corresponde à mesma coluna em cada seleção.

Atualização:

Realmente não acho que você queira unir essas tabelas, com base nos nomes das tabelas. Eles não parecem conter dados relacionados. Se você postar seu esquema e descrever o que está tentando alcançar, é provável que possamos oferecer uma ajuda melhor.

9
RedFilter

você poderia fazer

SELECT *
from members
UNION
SELECT inventory.*, 'dummy1' AS membersCol1, 'dummy2' AS membersCol2
from inventory;

Onde membersCol1, membersCol12, etc ... são os nomes das colunas de members que não estão em inventory. Dessa forma, ambas as consultas na união terão as mesmas colunas (supondo que todas as colunas em inventory sejam iguais a members o que me parece muito estranho ... mas, ei, é o seu esquema).

ATUALIZAÇÃO :

Como o HLGEM apontou, isso somente funcionará se inventory tiver colunas com os mesmos nomes que members, e em a mesma ordem. Nomear todas as colunas explicitamente é a melhor ideia, mas como não conheço os nomes, não posso fazer exatamente isso. Se eu fizesse isso, seria algo parecido com isto:

SELECT id, name, member_role, member_type
from members
UNION
SELECT id, name, '(dummy for union)' AS member_role, '(dummy for union)' AS member_type
from inventory;

Eu não gosto de usar NULL para valores dummy, porque nem sempre é claro de que parte da união veio um registro - usar 'dummy' deixa claro que o registro é da parte da união que não tinha esse registro (embora às vezes isso não importe). A própria idéia de unir essas duas tabelas me parece muito estranha, porque duvido muito que elas tenham mais de 1 ou 2 colunas com o mesmo nome, mas você fez a pergunta de uma maneira que imagino de alguma forma no seu cenário faz sentido.

6

Tem certeza de que não deseja participar? É improvável que o UNION lhe dê o que você deseja, dados os nomes das tabelas.

2
HLGEM

Cada instrução SELECT no operador MySQL UNION ALL deve ter o mesmo número de campos nos conjuntos de resultados com tipos de dados semelhantes. Visite https://www.techonthenet.com/mysql/union_all.php

0
user9862225

Não sei quantas linhas em cada tabela

Tem certeza de que não é isso que você quer?

SELECT 'members' AS TableName, Count(*) AS Cnt FROM members 
UNION ALL
SELECT 'inventory', Count(*) FROM inventory
0
ErikE