У меня есть база данных с двумя таблицами (Table1 и Table2). У них обоих есть общий столбец [ColumnA], который является nvarchar.
Как я могу выбрать этот столбец из обеих таблиц и вернуть его как один столбец в моем наборе результатов?
Итак, я ищу что-то вроде:
ColumnA in Table1:
a
b
c
ColumnA in Table2:
d
e
f
Result set should be:
a
b
c
d
e
f


SELECT ColumnA FROM Table1 UNION Select ColumnB FROM Table2 ORDER BY 1
Кроме того, если вы знаете, что содержимое таблиц Table1 и Table2 будет перекрываться НИКОГДА, вы можете использовать UNION ALL вместо UNION. Таким образом экономится немного ресурсов.
- Кевин Фэирчайлд
AFAIK, в частности, SQL Server будет автоматически упорядочивать по выбранному столбцу даже без явного ORDER BY. Но это верно только для случаев UNION, а не для UNION ALL. ORDER BY улучшает читаемость, если заказ был задуман намеренно.
Используйте оператор СОЮЗ:
SELECT ColumnA FROM Table1
UNION
SELECT ColumnA FROM Table2
Вы можете использовать выбор союза:
Select columnA from table1 union select columnA from table2
SELECT Table1.*, Table2.d, Table2.e, Table2.f
FROM Table1 JOIN Table2 ON Table1.a = Table2.a
Или я неправильно понял ваш вопрос?
Обновлено: похоже, я сделал.
Мое первое прочтение вопроса было таким же, как и ваше, ДжесДоу. На оригинальном плакате было бы немного яснее объяснить, что «a, b, c» и т. д. Были значения в ColumnA, тем более что вы использовали букву a как для столбца, так и для значения. Думаю, просто придирки.
Я считаю, что это:
SELECT columna FROM table1 UNION SELECT columnb FROM table2;
Тебя волнует, получишь ли ты дубли или нет?
UNION будет медленнее, чем UNION ALL, потому что UNION будет отфильтровывать дубликаты
В Oracle (по крайней мере) есть UNION и UNION ALL, UNION ALL вернет все результаты из обоих наборов, даже если есть дубликаты, тогда как UNION вернет разные результаты из обоих наборов.
Ответ объединения - почти правильный, в зависимости от перекрывающихся значений:
SELECT distinct ColumnA FROM Table1
UNION
SELECT distinct ColumnA FROM Table2
Если бы «d» появилось в Table1 или «c» появилось в Table2, у вас было бы несколько строк с ними.
Вы можете сделать ORDER BY 1 в своем первом запросе, чтобы избежать необходимости в подзапросе при заказе.