Для примеров я не знаю, сколько строк в каждой таблице, и я пытаюсь сделать вот так:
SELECT * FROM members
UNION
SELECT * FROM inventory
Что я могу поставить во второй SELECT
вместо *, чтобы удалить эту ошибку без добавления NULL
?
Для примеров я не знаю, сколько строк в каждой таблице, и я пытаюсь сделать вот так:
SELECT * FROM members
UNION
SELECT * FROM inventory
Что я могу поставить во второй SELECT
вместо *, чтобы удалить эту ошибку без добавления NULL
?
Поместите имена столбцов явно, а не *, и убедитесь, что количество столбцов и типов данных соответствует одному столбцу в каждом выборе.
Update:
Я действительно не думаю, что вы хотите объединить эти таблицы на основе имен таблиц. Кажется, что они не содержат связанных данных. Если вы публикуете свою схему и описываете то, что вы пытаетесь достичь, скорее всего, мы сможем оказать лучшую помощь.
вы могли бы сделать
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 столбца с одинаковым именем, но вы задали вопрос таким образом, чтобы я представлял в своем сценарии это как-то имеет смысл.
Вы уверены, что не хотите использовать соединение? Маловероятно, что UNOIN предоставит вам то, что вы хотите, с именами таблиц.
Я не знаю, сколько строк в каждой таблице
Вы уверены, что это не то, что вы хотите?
SELECT 'members' AS TableName, Count(*) AS Cnt FROM members
UNION ALL
SELECT 'inventory', Count(*) FROM inventory