Используемые операторы SELECT имеют различное количество столбцов

Для примеров я не знаю, сколько строк в каждой таблице, и я пытаюсь сделать вот так:

SELECT * FROM members 
UNION 
SELECT * FROM inventory

Что я могу поставить во второй SELECT вместо *, чтобы удалить эту ошибку без добавления NULL?

Ответ 1

Поместите имена столбцов явно, а не *, и убедитесь, что количество столбцов и типов данных соответствует одному столбцу в каждом выборе.

Update:

Я действительно не думаю, что вы хотите объединить эти таблицы на основе имен таблиц. Кажется, что они не содержат связанных данных. Если вы публикуете свою схему и описываете то, что вы пытаетесь достичь, скорее всего, мы сможем оказать лучшую помощь.

Ответ 2

вы могли бы сделать

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

Где membersCol1, membersCol12 и т.д. - это имена столбцов из members, которые не находятся в inventory. Таким образом, оба запроса в объединении будут иметь одинаковые столбцы (Предполагая, что все столбцы в inventory такие же, как в members, что кажется мне очень странным... но эй, это ваша схема).

UPDATE

Как указывал HLGEM, это будет работать, только если inventory имеет столбцы с теми же именами, что и members, и в том же порядке. Именование всех столбцов явным образом - лучшая идея, но поскольку я не знаю имен, я не могу это точно сделать. Если бы я это сделал, это могло бы выглядеть примерно так:

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;

Мне не нравится использовать NULL для фиктивных значений, потому что тогда не всегда ясно, из какой части объединения произошла запись - используя 'dummy', ясно, что запись принадлежит той части объединения, которая не имеют такую ​​запись (хотя иногда это может и не иметь значения). Сама идея объединения этих двух таблиц мне кажется очень странной, потому что я очень сомневаюсь, что у них будет более 1 или 2 столбца с одинаковым именем, но вы задали вопрос таким образом, чтобы я представлял в своем сценарии это как-то имеет смысл.

Ответ 3

Вы уверены, что не хотите использовать соединение? Маловероятно, что UNOIN предоставит вам то, что вы хотите, с именами таблиц.

Ответ 4

Я не знаю, сколько строк в каждой таблице

Вы уверены, что это не то, что вы хотите?

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