Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 or в on джойна  [new]
mnemolog
Member

Откуда:
Сообщений: 27
В каком стандарте sql была введена возможность указания условия соединения OR?
Например: t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2).
sql92?
5 ноя 19, 19:48    [22010219]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
miksoft
Member

Откуда:
Сообщений: 38826
mnemolog,

Подозреваю, что в том же, где вообще появились JOIN-ы.
В OR ничего такого нет, это просто один из логических операторов.
5 ноя 19, 19:58    [22010222]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3141
Блог
mnemolog
sql92?
Да
6 ноя 19, 10:39    [22010523]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Тут темы сравнения нету. Куда это? В проектирование инфо систем? Или в Программинг?
6 ноя 19, 16:06    [22010880]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
msLex
Member

Откуда:
Сообщений: 9012
mayton
Тут темы сравнения нету

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

А в какой СУБД этот синтаксис был поддержан раньше?
SQL Server, Oracle, IBM DB2
6 ноя 19, 16:58    [22010937]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
miksoft
Member

Откуда:
Сообщений: 38826
msLex
А в какой СУБД этот синтаксис был поддержан раньше?
А есть хоть одна версия какой-либо SQL-СУБД, в которой есть JOIN, но нельзя использовать OR в условиях соединения?

Сообщение было отредактировано: 6 ноя 19, 18:32
6 ноя 19, 18:31    [22011031]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
msLex
Member

Откуда:
Сообщений: 9012
miksoft
msLex
А в какой СУБД этот синтаксис был поддержан раньше?
А есть хоть одна версия какой-либо SQL-СУБД, в которой есть JOIN, но нельзя использовать OR в условиях соединения?

Не знаю. Может какие embeded движки имеют ограничения.
7 ноя 19, 09:37    [22011228]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

msLex
Может какие embeded движки имеют ограничения.

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

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

Posted via ActualForum NNTP Server 1.5

7 ноя 19, 13:16    [22011463]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
msLex
Member

Откуда:
Сообщений: 9012
Dimitry Sibiryakov
msLex
Может какие embeded движки имеют ограничения.

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

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


Так то от "вписать в синтаксическую диаграмму" до "реализовать поддержку в оптимизаторе запросов" пропасть, кто и как эту пропасть преодолевает - вопрос.

Сообщение было отредактировано: 7 ноя 19, 16:48
7 ноя 19, 16:47    [22011685]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
 t1 join t2 on (t1.id1 = t2.id1 or t1.id2 = t2.id2).


Можно ли это выражение описать через UNION ALL ?
7 ноя 19, 16:49    [22011686]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
msLex
Member

Откуда:
Сообщений: 9012
mayton
 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

Сообщение было отредактировано: 7 ноя 19, 17:00
7 ноя 19, 16:59    [22011689]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
UNION сработает при условии что из двух предикатов OR будет срабатывать только один.
Иначе получим дубликаты строк которые придется убирать через UNION ALL
или DISTINCT.
8 ноя 19, 01:35    [22011992]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 11020
Только наоборот: UNION ALL оставляет все строки, UNION - убирает дубли.
8 ноя 19, 07:50    [22012034]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Да точно.
8 ноя 19, 08:23    [22012042]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
msLex
Member

Откуда:
Сообщений: 9012
msLex
mayton
 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" и "!="

...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
8 ноя 19, 11:28    [22012189]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29805
msLex
А в какой СУБД этот синтаксис был поддержан раньше?
SQL Server, Oracle, IBM DB2

в InterBase, в 1994 году. полноценные стандартные inner и outer. Насколько я помню, на тот момент в Оракле и МС СКЛ были только звездочки и плюсики вместо left/right outer join.
9 ноя 19, 11:33    [22012713]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65894
Блог
kdv
Насколько я помню, на тот момент в Оракле и МС СКЛ были только звездочки и плюсики вместо left/right outer join.

Жаль, что это изменилось.
9 ноя 19, 12:28    [22012723]     Ответить | Цитировать Сообщить модератору
 Re: or в on джойна  [new]
Сергей Васкецов
Member

Откуда:
Сообщений: 20362
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-летней давности.
11 ноя 19, 08:45    [22013232]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить