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

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
Вопрос по фильтру фильтру в join
    #40077684
Фотография 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
...
Рейтинг: 0 / 0
Вопрос по фильтру фильтру в join
    #40077685
elay13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Вопрос по фильтру фильтру в join
    #40077686
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elay13,

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

каждая строка из таблицы слева сравнивается в каждой строкой из таблицы справа. Нарисуйте на бумажке все комбинации и выполните операцию сравнения.
...
Рейтинг: 0 / 0
Вопрос по фильтру фильтру в join
    #40077691
elay13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов, а есть ли возможность подсчитать только client_id из t2, у которых doc не будет не будет в t1. На выходе хочу получить 0. Что-то в стиле not in.
...
Рейтинг: 0 / 0
Вопрос по фильтру фильтру в join
    #40077692
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по фильтру фильтру в join
    #40077693
elay13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, Огромное спасибо!
...
Рейтинг: 0 / 0
Вопрос по фильтру фильтру в join
    #40077694
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elay13
alexeyvg, Огромное спасибо!


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


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


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


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