Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по фильтру фильтру в join / 11 сообщений из 11, страница 1 из 1
15.06.2021, 16:00
    #40077681
elay13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
Имеется следующий запрос:

CREATE TABLE #t1 (client_id nvarchar(50), doc nvarchar(50),card_number nvarchar(50));
INSERT INTO #t1 VALUES
('A','123','1****1'),
('B','567','1****1');

CREATE TABLE #t2 (client_id nvarchar(50), doc nvarchar(50),card_number nvarchar(50));
INSERT INTO #t2 VALUES
('C','123','1****1'),
('D','567','1****1');

select count(distinct t2.client_id)
from #t1 t1
join #t2 t2
on t1.card_number=t2.card_number
and t1.doc<>t2.doc

Подскажите, почему в результате я получаю 2, ведь вот этим фильтром and t1.doc<>t2.doc я не должен учитывать совпадающие в t1 и t2 doc? Заранее спасибо и буду благодарен, если объясните как это сделать правильно.
...
Рейтинг: 0 / 0
15.06.2021, 16:06
    #40077684
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
elay13
Подскажите, почему в результате я получаю 2, ведь вот этим фильтром and t1.doc<>t2.doc я не должен учитывать совпадающие в t1 и t2 doc?
Вы замените в запросе count(distinct t2.client_id) на *, и увидите, какие данные возвращаются.

t1.card_number=t2.card_number означает связь всех записей,
а t1.doc<>t2.doc означает, что С свяжется с А, а не с В ,а Д свяжется с В ,а не с А
Итого обе записи из t2 выведутся, то есть в результате будет 2, а не 1
...
Рейтинг: 0 / 0
15.06.2021, 16:09
    #40077685
elay13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
alexeyvg
elay13
Подскажите, почему в результате я получаю 2, ведь вот этим фильтром and t1.doc<>t2.doc я не должен учитывать совпадающие в t1 и t2 doc?
Вы замените в запросе count(distinct t2.client_id) на *, и увидите, какие данные возвращаются.

t1.card_number=t2.card_number означает связь всех записей,
а t1.doc<>t2.doc означает, что С свяжется с А, а не с В ,а Д свяжется с В ,а не с А
Итого обе записи из t2 выведутся, то есть в результате будет 2, а не 1



Подскажите, а как мне подсчитать только client_id из t2, у которых doc не будет не будет в t1. На выходе хочу получить 0.
...
Рейтинг: 0 / 0
15.06.2021, 16:09
    #40077686
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
elay13,

1<>5 and 5<>1. Коммутативность.
...
Рейтинг: 0 / 0
15.06.2021, 16:11
    #40077688
elay13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
Владислав Колосов, не совсем Вас понял.
...
Рейтинг: 0 / 0
15.06.2021, 16:15
    #40077690
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
elay13,

каждая строка из таблицы слева сравнивается в каждой строкой из таблицы справа. Нарисуйте на бумажке все комбинации и выполните операцию сравнения.
...
Рейтинг: 0 / 0
15.06.2021, 16:16
    #40077691
elay13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
Владислав Колосов, а есть ли возможность подсчитать только client_id из t2, у которых doc не будет не будет в t1. На выходе хочу получить 0. Что-то в стиле not in.
...
Рейтинг: 0 / 0
15.06.2021, 16:19
    #40077692
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
elay13
Подскажите, а как мне подсчитать только client_id из t2, у которых doc не будет не будет в t1. На выходе хочу получить 0.
"не будет не будет" - это not exists
Код: sql
1.
2.
3.
select count(distinct t1.client_id)
from #t1 t1
where not exists(select * from #t2 t2 where t1.doc=t2.doc)
...
Рейтинг: 0 / 0
15.06.2021, 16:24
    #40077693
elay13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
alexeyvg, Огромное спасибо!
...
Рейтинг: 0 / 0
15.06.2021, 16:25
    #40077694
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
elay13
alexeyvg, Огромное спасибо!


Два раза! два раза!
...
Рейтинг: 0 / 0
15.06.2021, 16:45
    #40077701
elay13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по фильтру фильтру в join
Кесарь
elay13
alexeyvg, Огромное спасибо!


Два раза! два раза!


:D
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по фильтру фильтру в join / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]