Используемые операторы SELECT имеют разное количество столбцов
для примеров я не знаю, сколько строк в каждой таблице, и я пытаюсь сделать вот так:
SELECT * FROM members
UNION
SELECT * FROM inventory
что я могу поставить на второй SELECT
вместо *, чтобы удалить эту ошибку без добавления NULL
'ы?
5 ответов
поместите имена столбцов явно, а не *, и убедитесь, что количество столбцов и типов данных совпадают для одного столбца в каждом выборе.
обновление:
Я действительно не думаю, что вы хотите объединять эти таблицы, основываясь на именах таблиц. Похоже, они не содержат связанных данных. Если вы опубликуете свою схему и опишете, чего вы пытаетесь достичь, вероятно, мы сможем предоставить лучшую помощь.
вы могли бы сделать
SELECT *
from members
UNION
SELECT inventory.*, 'dummy1' AS membersCol1, 'dummy2' AS membersCol2
from inventory;
здесь membersCol1
, membersCol12
, etc... имена столбцов из members
, не inventory
. Таким образом, оба запроса в объединении будут иметь одинаковые столбцы (при условии, что все столбцы в inventory
такие же как и в members
что мне кажется очень странным... но эй, это твоя схема).
обновление:
как отметил 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 для фиктивных значений, потому что тогда не всегда ясно, из какой части Союза пришла запись - использование "фиктивного" дает понять, что запись из той части Союза, у которой не было этой записи (хотя иногда это может быть не так вопрос.) Сама идея объединения этих двух таблиц кажется мне очень странной, потому что я очень сомневаюсь, что у них будет более 1 или 2 столбцов с тем же именем, но вы задали вопрос таким образом, что я думаю, что в вашем сценарии это каким-то образом имеет смысл.
вы уверены, что не хотите присоединиться вместо этого? Маловероятно, что UNOIN даст вам то, что вы хотите, учитывая имена таблиц.
Я не знаю, сколько строк в каждой таблице
вы уверены, что это не то, что вы хотите?
SELECT 'members' AS TableName, Count(*) AS Cnt FROM members
UNION ALL
SELECT 'inventory', Count(*) FROM inventory
каждый оператор SELECT в MySQL UNION ALL operator должен иметь одинаковое количество полей в результирующих наборах с аналогичными типами данных Посещение https://www.techonthenet.com/mysql/union_all.php