Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нет возможности использовать в left join - OR / 13 сообщений из 13, страница 1 из 1
13.10.2019, 18:32
    #39875686
nc1318
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
Как можно переписать запрос, если нет возможности использовать в left join - OR

with tb1 as (select 1 a, 2 b, 3 c
from dual
union all
select 4, 5, 6
from dual
union all
select 7, 8, 9
from dual
union
select 80, 88, 10
from dual
union
select 24, 88, 64
from dual
union
select 733, 88, 10
from dual
union
select 456, 99, 7575
from dual
union
select 1001, 90921, 75751
from dual),
tb2 as (select 1 a, 2 b , 3 c
from dual
union
select 5, 3, 1
from dual
union
select 8, 8, 9
from dual
union
select 73, 88, 10
from dual
union
select 100, 929, 7575
from dual
union
select 1001, 9092, 75751
from dual)
select tb1.a, tb1.b, tb1.c, tb2.a, tb2.b, tb2.c
from tb1 left join tb2 on (tb1.b = tb2.b or tb1.c = tb2.c and tb1.a = tb2.a)
...
Рейтинг: 0 / 0
13.10.2019, 18:54
    #39875691
nc1318
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
nc1318,

есть такой вариант, но правильно ли он будет рабоать :
with tb1 as (select 1 a, 2 b, 3 c
from dual
union all
select 4, 5, 6
from dual
union all
select 7, 8, 9
from dual
union
select 80, 88, 10
from dual
union
select 24, 88, 64
from dual
union
select 733, 88, 10
from dual
union
select 456, 99, 7575
from dual
union
select 1001, 90921, 75751
from dual),
tb2 as (select 1 a, 2 b , 3 c
from dual
union
select 5, 3, 1
from dual
union
select 8, 8, 9
from dual
union
select 73, 88, 10
from dual
union
select 100, 929, 7575
from dual
union
select 1001, 9092, 75751
from dual)
select * from tb1 left join
(
select tb1.a a1, tb1.b b1, tb1.c c1
from tb1 join tb2 on tb1.b = tb2.b
union
select tb1.a a1, tb1.b b1, tb1.c c1
from tb1 join tb2 on tb1.c = tb2.c and tb1.a = tb2.a
) tb2 on tb2.a1 = tb1.a and tb2.b1 = tb1.b and tb2.c1 = tb1.c
...
Рейтинг: 0 / 0
13.10.2019, 20:35
    #39875708
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
14.10.2019, 14:01
    #39875974
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
nc1318нет возможности использовать в left join - OR
Это как так?
...
Рейтинг: 0 / 0
14.10.2019, 14:10
    #39875983
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
andrey_anonymousnc1318нет возможности использовать в left join - OR
Это как так?Возможно студенту в одно ухо влетело про ограниечение на оракловый синтаксис джоина, а в другое задача на внешнее соединение.
...
Рейтинг: 0 / 0
14.10.2019, 14:28
    #39875996
nc1318
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
andrey_anonymous,

интересно как это можно реализовать
...
Рейтинг: 0 / 0
14.10.2019, 14:31
    #39875999
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
nc1318интересно как это можно реализовать

Что реализовать?

Запрос из Вашего первого поста вроде работает (Oracle 11), что требуется и что не работает - вот лично мне совершенно не понятно.
...
Рейтинг: 0 / 0
14.10.2019, 14:37
    #39876008
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
nc1318интересно как это можно реализоватьЕсли это спортивный интерес, то любое выражение булевой логики можно реализовать без OR.
Если не спортивный, то 21993232
...
Рейтинг: 0 / 0
14.10.2019, 16:21
    #39876095
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
-2-nc1318интересно как это можно реализоватьЕсли это спортивный интерес, то любое выражение булевой логики можно реализовать без OR.
Оно, конечно, действительно:
Код: plsql
1.
2.
3.
4.
select tb1.a, tb1.b, tb1.c, tb2.a, tb2.b, tb2.c
  from tb1, tb2 
 where not(not(tb1.b = tb2.b(+))
   and not(tb1.c = tb2.c(+) AND tb1.a = tb2.a(+)))


но от ora-01719 на родном оракловом синтаксисе это не спасает :)
...
Рейтинг: 0 / 0
14.10.2019, 17:27
    #39876135
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
andrey_anonymous,

Остаётся благодарить небеса, что в подобных случаях засовывание в case спасает.
Код: plaintext
case when (tb1.b = tb2.b(+) or tb1.c = tb2.c(+) and tb1.a = tb2.a(+)) then 1 end = 1
...
Рейтинг: 0 / 0
14.10.2019, 17:30
    #39876140
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
КобанчегОстаётся благодарить небеса, что в подобных случаях засовывание в case спасает.
Это же не спортивно :)
...
Рейтинг: 0 / 0
14.10.2019, 17:40
    #39876144
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
andrey_anonymousКобанчегзасовывание в case спасает.
Это же не спортивно :)
Только decode, только хардкор!
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select tb1.a, tb1.b, tb1.c, tb2.a, tb2.b, tb2.c
  from tb1, tb2 
 where 1 = decode(tb1.b, tb2.b(+), 1
                 , decode( tb1.a, tb2.a(+)
                         , decode(tb1.c, tb2.c(+), 1) 
                   )
           )
...
Рейтинг: 0 / 0
14.10.2019, 17:46
    #39876148
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нет возможности использовать в left join - OR
Ыщщо один кошмарик
Код: plsql
1.
2.
3.
4.
5.
6.
select tb1.a, tb1.b, tb1.c, tb2.a, tb2.b, tb2.c
  from tb1, tb2 
 where 0 = (tb1.b - tb2.b(+))
         * ( abs( tb1.a - tb2.a(+) )
           + abs( tb1.c-tb2.c(+) ) 
           )
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нет возможности использовать в left join - OR / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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