Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как создать условие для JOIN / 7 сообщений из 7, страница 1 из 1
08.09.2021, 18:30
    #40096108
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
Здравствуйте

Подскажите, пожалуйста, как создать условие для JOIN таким образом, чтобы JOIN срабатывал только если ConfigID IS NOT NULL.
Т.е. если ConfigID IS NULL - взять всех игроков из таблицы А, если ConfigID IS NOT NULL - только пересечения А и В.

1.
SELECT А.Users
FROM A
INNER JOIN B ON (ConfigID IS NOT NULL and A.UserID=B.UserID) OR (ConfigID IS NULL)

2.
SELECT А.Users
LEFT JOIN B ON A.UserID=B.UserID
WHERE (ConfigID IS NULL) OR (ConfigID IS NOT NULL AND B.UserID IS NOT NULL)


Первый пример на больших данных вообще плохой вариант.
Второй смущает тем, что LEFT JOIN с подзапросом, например, высчитает данные для юзеров, даже если они не имеют значения, а в идеале, чтобы JOIN "активировался" только при заполненном ConfigID.

Можно ли это сделать без динамического SQL?

Вообще это должна быть процедура с множеством конфигураций, чтобы запускать отчеты в цикле.
И моя главная боль в том, как не считать лишнее, если конфигурация не установлена, оптимизейшн так сказать...
...
Рейтинг: 0 / 0
08.09.2021, 18:47
    #40096113
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
Luna17
Здравствуйте

Подскажите, пожалуйста, как создать условие для JOIN таким образом, чтобы JOIN срабатывал только если ConfigID IS NOT NULL.


я не профи, но сделал бы так
заменил это
Код: sql
1.
2.
3.
SELECT А.Users
FROM A
INNER JOIN B ON (ConfigID IS NOT NULL and A.UserID=B.UserID) OR (ConfigID IS NULL)


на
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT А.Users
FROM A
INNER JOIN B ON A.UserID=B.UserID and ConfigID IS NOT NULL
union all
SELECT А.Users
FROM A
WHERE ConfigID IS NULL



и, возможно, если позволяет версия, то использовать INTERSECT взамен INNER
...
Рейтинг: 0 / 0
08.09.2021, 19:40
    #40096132
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
Учить надо... булеву алгебру.

Код: sql
1.
2.
3.
SELECT А.Users
FROM A
INNER JOIN B ON A.UserID=B.UserID OR ConfigID IS NULL



Хоть короче будет.
...
Рейтинг: 0 / 0
08.09.2021, 20:38
    #40096150
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
Luna17,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT А.Users
FROM A
INNER JOIN B ON A.UserID=B.UserID
where
 ConfigID is not null

union all

SELECT А.Users
FROM A
where
 ConfigID is null
...
Рейтинг: 0 / 0
09.09.2021, 12:18
    #40096304
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
invm,
HandKot,


Union не подходит, т.к. таких джойнов будет много
...
Рейтинг: 0 / 0
09.09.2021, 13:13
    #40096317
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
Luna17
а в идеале, чтобы JOIN "активировался" только при заполненном ConfigID.
Ну тогда так
Код: sql
1.
2.
3.
SELECT А.Users
FROM A
left loop JOIN B ON A.ConfigID IS NOT NULL and A.UserID=B.UserID

Только далеко не факт, что это будет оптимальной решение
...
Рейтинг: 0 / 0
09.09.2021, 16:15
    #40096410
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать условие для JOIN
Luna17
invm,
HandKot,


Union не подходит, т.к. таких джойнов будет много

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


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