Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 UNION увеличивает количество выводимых строк.  [new]
Kirill_l.s.
Member

Откуда:
Сообщений: 18
Добрый день!
Столкнулся с интересным случаем:
Имеется 2 запроса. Первый по оплаченным чекам, второй по неоплаченным. Запросы не имеют уникального идентификатора.
При совмещении этих запросов через UNION, результат увеличивается на 7 лишних строк. С 3366+24 = 3390 до 3397.
При добавлении в запрос Id содержащихся в чеке единиц продаж (часть id имеют дубль из запроса 1 в запросе 2), то результат выводится правильный 3390.

Непонятно, как UNION может увеличивать количество выводимых строк.

Может кто разъяснит подобное поведение программы?

Заранее благодарю!
9 янв 19, 16:11    [21780750]     Ответить | Цитировать Сообщить модератору
 Re: UNION увеличивает количество выводимых строк.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Kirill_l.s.
Добрый день!
Столкнулся с интересным случаем:
Имеется 2 запроса. Первый по оплаченным чекам, второй по неоплаченным. Запросы не имеют уникального идентификатора.
При совмещении этих запросов через UNION, результат увеличивается на 7 лишних строк. С 3366+24 = 3390 до 3397.
При добавлении в запрос Id содержащихся в чеке единиц продаж (часть id имеют дубль из запроса 1 в запросе 2), то результат выводится правильный 3390.

Непонятно, как UNION может увеличивать количество выводимых строк.

Может кто разъяснит подобное поведение программы?

Заранее благодарю!

Легко. У Вас есть 7 чеков, по которым не было строк. Только заголовки. Покупатель набрал товаров - и отменил свой заказ на кассе. Сумма есть. Признак оплаты равен 0.
Вы пишете первый запрос "по оплаченным чекам" и ставите условие "сумма оплаты > 0". И туда попадают эти отмененные 7 чеков.
Вы пишете второй запрос "по неоплаченным" и ставите ДРУГОЕ условие "признак оплаты = 0". И туда тоже попадают эти отмененные 7 чеков.

Вы пишете через inner join в таблицу заголовков использование строк чеков в ПЕРВОМ запросе - и там эти 7 чеков исчезают, а во втором запросе Вы inner join разумеется не используете, у отмененных чеков не бывает строк, поэтому там эти 7 чеков есть. И при union их становится 3390, а не 3397.

Понятно? Следующий!
9 янв 19, 16:28    [21780767]     Ответить | Цитировать Сообщить модератору
 Re: UNION увеличивает количество выводимых строк.  [new]
Kirill_l.s.
Member

Откуда:
Сообщений: 18
Andy_OLAP, Да, понятно.
Благодарю за развёрнутый ответ! )
9 янв 19, 16:46    [21780799]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить