#sql #sql-server #union
#sql #sql-сервер #объединение
Вопрос:
В инструкции SQL Server есть
SELECT id, book, acnt, prod, category from Table1 <where clause...>
UNION
SELECT id, book, acnt, prod, category from Table2 <where clause...>
Первый запрос вернул 131 972 строки данных; второй — 147 692 строки. Я не заметил, что из этих двух таблиц есть какая-либо общая строка данных, поэтому я ожидаю, что результирующий набор после ОБЪЕДИНЕНИЯ должен быть таким же, как сумма 131972 147692 = 279 384.
Однако результирующий набор после ОБЪЕДИНЕНИЯ равен 133 857. Даже если они могли перекрывать строки, которые я случайно пропустил, результат должен быть, по крайней мере, таким же, как и больший результирующий набор из этих двух. Я не могу понять, откуда взялось число 133 857.
Правильно ли я понимаю SQL UNION? В этом случае я использую SQL server.
Комментарии:
1.
UNION
удаление дубликатов ваших данных, поэтому, если строка появляется несколько раз, она отображается только один раз. Вы хотитеUNION ALL
.
Ответ №1:
Чтобы расширить комментарий, приведенный под вопросом, который, я думаю, излагает то, что вы уже знаете:
UNION
заботится о дубликатах также и внутри одной таблицы.
Просто взгляните на пример:
НАСТРОЙКА:
create table tbl1 (col1 int, col2 int);
insert into tbl1 values
(1,2),
(3,4);
create table tbl2 (col1 int, col2 int);
insert into tbl1 values
(1,2),
(1,2),
(1,2),
(3,4);
Запрос
select * from tbl1
union
select * from tbl2;
будет производить продукцию
col1 | col2
-----|------
1 | 2
3 | 4