powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как создать условие для JOIN
7 сообщений из 7, страница 1 из 1
Как создать условие для JOIN
    #40096108
Luna17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте

Подскажите, пожалуйста, как создать условие для 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
Как создать условие для JOIN
    #40096113
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как создать условие для JOIN
    #40096132
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учить надо... булеву алгебру.

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



Хоть короче будет.
...
Рейтинг: 0 / 0
Как создать условие для JOIN
    #40096150
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как создать условие для JOIN
    #40096304
Luna17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
HandKot,


Union не подходит, т.к. таких джойнов будет много
...
Рейтинг: 0 / 0
Как создать условие для JOIN
    #40096317
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как создать условие для JOIN
    #40096410
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Luna17
invm,
HandKot,


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

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


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