Гость
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / or в on джойна / 18 сообщений из 18, страница 1 из 1
05.11.2019, 19:48
    #39885426
mnemolog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
В каком стандарте sql была введена возможность указания условия соединения OR?
Например: t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2).
sql92?
...
Рейтинг: 0 / 0
05.11.2019, 19:58
    #39885428
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
mnemolog,

Подозреваю, что в том же, где вообще появились JOIN-ы.
В OR ничего такого нет, это просто один из логических операторов.
...
Рейтинг: 0 / 0
06.11.2019, 10:39
    #39885585
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
mnemolog
sql92?
Да
...
Рейтинг: 0 / 0
06.11.2019, 16:06
    #39885841
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
Тут темы сравнения нету. Куда это? В проектирование инфо систем? Или в Программинг?
...
Рейтинг: 0 / 0
06.11.2019, 16:58
    #39885887
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
mayton
Тут темы сравнения нету

Так добавить то не сложно.

А в какой СУБД этот синтаксис был поддержан раньше?
SQL Server, Oracle, IBM DB2
...
Рейтинг: 0 / 0
06.11.2019, 18:31
    #39885942
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
msLex
А в какой СУБД этот синтаксис был поддержан раньше?
А есть хоть одна версия какой-либо SQL-СУБД, в которой есть JOIN, но нельзя использовать OR в условиях соединения?
...
Рейтинг: 0 / 0
07.11.2019, 09:37
    #39886056
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
miksoft
msLex
А в какой СУБД этот синтаксис был поддержан раньше?
А есть хоть одна версия какой-либо SQL-СУБД, в которой есть JOIN, но нельзя использовать OR в условиях соединения?

Не знаю. Может какие embeded движки имеют ограничения.
...
Рейтинг: 0 / 0
07.11.2019, 13:16
    #39886183
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
msLexМожет какие embeded движки имеют ограничения.

Угу, FwMas. Хотя постойте, там джоинов нет.

Разработчикам движков проще вписать в синтаксическую диаграмму "ON <boolean_expression>"
чем создавать в этом месте отдельную ветку выражения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.11.2019, 16:47
    #39886320
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
Dimitry Sibiryakov
msLexМожет какие embeded движки имеют ограничения.

Угу, FwMas. Хотя постойте, там джоинов нет.

Разработчикам движков проще вписать в синтаксическую диаграмму "ON <boolean_expression>"
чем создавать в этом месте отдельную ветку выражения.

Так то от "вписать в синтаксическую диаграмму" до "реализовать поддержку в оптимизаторе запросов" пропасть, кто и как эту пропасть преодолевает - вопрос.
...
Рейтинг: 0 / 0
07.11.2019, 16:49
    #39886321
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
Код: sql
1.
 t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2).



Можно ли это выражение описать через UNION ALL ?
...
Рейтинг: 0 / 0
07.11.2019, 16:59
    #39886324
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
mayton
Код: sql
1.
 t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2).




Можно ли это выражение описать через UNION ALL ?

Только в ограниченном числе случаев.


Например, для вот таких наборов данных ни UNION ALL ни UNION не вернут нужного варианта

t1
1,2


t2
1,2
1,2
...
Рейтинг: 0 / 0
08.11.2019, 01:35
    #39886536
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
UNION сработает при условии что из двух предикатов OR будет срабатывать только один.
Иначе получим дубликаты строк которые придется убирать через UNION ALL
или DISTINCT.
...
Рейтинг: 0 / 0
08.11.2019, 07:50
    #39886567
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
Только наоборот: UNION ALL оставляет все строки, UNION - убирает дубли.
...
Рейтинг: 0 / 0
08.11.2019, 08:23
    #39886572
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
Да точно.
...
Рейтинг: 0 / 0
08.11.2019, 11:28
    #39886667
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
msLex
mayton
Код: sql
1.
 t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2).





Можно ли это выражение описать через UNION ALL ?

Только в ограниченном числе случаев.


Например, для вот таких наборов данных ни UNION ALL ни UNION не вернут нужного варианта

t1
1,2


t2
1,2
1,2


На самом деле, я не совсем прав.
Это условие можно представить в виде union all без "or", правда придется использовать "and" и "!="

Код: sql
1.
2.
3.
4.
5.
...on t1.id1 = t2.id1 and t1.id2 != t2.id2
union all
...on t1.id1 != t2.id1 and t1.id2 = t2.id2
union all
...on t1.id1 = t2.id1 and t1.id2 = t2.id2
...
Рейтинг: 0 / 0
09.11.2019, 11:33
    #39887014
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
msLexА в какой СУБД этот синтаксис был поддержан раньше?
SQL Server, Oracle, IBM DB2
в InterBase, в 1994 году. полноценные стандартные inner и outer. Насколько я помню, на тот момент в Оракле и МС СКЛ были только звездочки и плюсики вместо left/right outer join.
...
Рейтинг: 0 / 0
09.11.2019, 12:28
    #39887019
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
kdv
Насколько я помню, на тот момент в Оракле и МС СКЛ были только звездочки и плюсики вместо left/right outer join.

Жаль, что это изменилось.
...
Рейтинг: 0 / 0
11.11.2019, 08:45
    #39887309
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
or в on джойна
mnemolog
Например: t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2)

Условие после on - это просто логическое условие.
У меня есть случай вида t1 left join t2 on (t1.id1 = t2.id1 and not exists(...)) - и работает на убогом старье почти 20-летней давности.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / or в on джойна / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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