Текущее время: Чт, май 15 2025, 02:30

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: JOIN JOIN'у рознь?
СообщениеДобавлено: Пн, июл 11 2005, 10:06 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 09 2004, 11:38
Сообщения: 127
Пол: Мужской
Есть два запроса:

Code:
SELECT *
    FROM anla AS a LEFT OUTER JOIN anlc AS c ON a~bukrs = c~bukrs
                                      AND a~anln1 = c~anln1
                                      AND a~anln2 = c~anln2
                   LEFT OUTER JOIN anlu AS u ON a~bukrs = u~bukrs
                                      AND a~anln1 = u~anln1
                                      AND a~anln2 = u~anln2
                   LEFT OUTER JOIN anep AS p ON a~bukrs = p~bukrs
                                      AND a~anln1 = p~anln1
                                      AND a~anln2 = p~anln2
    INTO CORRESPONDING FIELDS OF TABLE ET_OUTER_JOIN
   WHERE a~bukrs = i_bukrs.


Code:
  SELECT *
    FROM anla AS a INNER JOIN anlc AS c ON a~bukrs = c~bukrs
                                                          AND a~anln1 = c~anln1
                                                          AND a~anln2 = c~anln2
                           INNER JOIN anlu AS u ON a~bukrs = u~bukrs
                                                          AND a~anln1 = u~anln1
                                                          AND a~anln2 = u~anln2
                           INNER JOIN anep AS p ON a~bukrs = p~bukrs
                                                          AND a~anln1 = p~anln1
                                                          AND a~anln2 = p~anln2
    INTO CORRESPONDING FIELDS OF TABLE ET_INNER_JOIN
    WHERE a~bukrs = i_bukrs.


Они должны выдавать разные результаты??????
Мне казалось, что с left join'ом - все что есть в anla будет вываливаться, а с right join'ом - только те записи, в которых есть соответствия в "правых" таблицах?????

Но возвращает одинаковый набор записей. :( В чем проблема, объясните, плиз, старому дураку... :shock: :oops:

_________________
Труд сделал из обезьяны человека, из коня - транспорт... Тут как повезет...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JOIN JOIN'у рознь?
СообщениеДобавлено: Пн, июл 11 2005, 11:01 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
Voffka написал:
Есть два запроса:

Code:
SELECT *
    FROM anla AS a LEFT OUTER JOIN anlc AS c ON a~bukrs = c~bukrs
                                      AND a~anln1 = c~anln1
                                      AND a~anln2 = c~anln2
                   LEFT OUTER JOIN anlu AS u ON a~bukrs = u~bukrs
                                      AND a~anln1 = u~anln1
                                      AND a~anln2 = u~anln2
                   LEFT OUTER JOIN anep AS p ON a~bukrs = p~bukrs
                                      AND a~anln1 = p~anln1
                                      AND a~anln2 = p~anln2
    INTO CORRESPONDING FIELDS OF TABLE ET_OUTER_JOIN
   WHERE a~bukrs = i_bukrs.


Code:
  SELECT *
    FROM anla AS a INNER JOIN anlc AS c ON a~bukrs = c~bukrs
                                                          AND a~anln1 = c~anln1
                                                          AND a~anln2 = c~anln2
                           INNER JOIN anlu AS u ON a~bukrs = u~bukrs
                                                          AND a~anln1 = u~anln1
                                                          AND a~anln2 = u~anln2
                           INNER JOIN anep AS p ON a~bukrs = p~bukrs
                                                          AND a~anln1 = p~anln1
                                                          AND a~anln2 = p~anln2
    INTO CORRESPONDING FIELDS OF TABLE ET_INNER_JOIN
    WHERE a~bukrs = i_bukrs.


Они должны выдавать разные результаты??????
Мне казалось, что с left join'ом - все что есть в anla будет вываливаться, а с right join'ом - только те записи, в которых есть соответствия в "правых" таблицах?????

Но возвращает одинаковый набор записей. :( В чем проблема, объясните, плиз, старому дураку... :shock: :oops:


Я может ошибаюсь - но я чтото не вижу тут right join-а.
Inner Join - это записи 1 к 1.
левый джойн = правому джойну - с той разницей, что логически меняются местами таблицы: общий смысл - выбираются все записи одной таблицы и только те которые совпадают в другой таблице.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JOIN JOIN'у рознь?
СообщениеДобавлено: Пн, июл 11 2005, 11:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 09 2004, 11:38
Сообщения: 127
Пол: Мужской
Egal написал:
Есть два запроса:

Я может ошибаюсь - но я чтото не вижу тут right join-а.
Inner Join - это записи 1 к 1.
левый джойн = правому джойну - с той разницей, что логически меняются местами таблицы: общий смысл - выбираются все записи одной таблицы и только те которые совпадают в другой таблице.




Однако, вот какая заковыка (выдрано из SAPHelp):
Цитата:

In an inner join, a line from the left-hand database table or join is only included in the selection if there is one or more lines in the right-hand database table that meet the ON condition <cond>. The left outer join, on the other hand, reads lines from the left-hand database table or join even if there is no corresponding line in the right-hand table.


Чуствую, я совсем запутался... :?
[/quote][/code]

_________________
Труд сделал из обезьяны человека, из коня - транспорт... Тут как повезет...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JOIN JOIN'у рознь?
СообщениеДобавлено: Пн, июл 11 2005, 11:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Voffka написал:
Есть два запроса:

Они должны выдавать разные результаты??????
....
Но возвращает одинаковый набор записей. :( В чем проблема, объясните, плиз, старому дураку... :shock: :oops:
Да нет никакой проблемы, результат выдает разный, как и следовало ожидать. Может невнимательно смотришь?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JOIN JOIN'у рознь?
СообщениеДобавлено: Пн, июл 11 2005, 11:52 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Voffka написал:
Однако, вот какая заковыка (выдрано из SAPHelp):
Цитата:

In an inner join, a line from the left-hand database table or join is only included in the selection if there is one or more lines in the right-hand database table that meet the ON condition <cond>. The left outer join, on the other hand, reads lines from the left-hand database table or join even if there is no corresponding line in the right-hand table.

Чуствую, я совсем запутался... :?


эээ... насколько я понимаю буржуйский - тут так и написано, что при inner join в выборку попадают только те записи, которые есть в левой и правой таблице. А для left join'a соответственно наличие присутствия записи в правой части ключевой роли не играет. В явном виде right join в open sql отсутствует.
А почему у вас одинаковое количество записей в выборках - могу только предположить что для условия "a~bukrs = i_bukrs" все записи в таблице anla присутствуют в anlc, anlu, anep.
ЗЫ. Писать слово inner не обязательно, оно предполагается по умолчанию

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JOIN JOIN'у рознь?
СообщениеДобавлено: Пн, июл 11 2005, 13:47 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
Voffka написал:
Чуствую, я совсем запутался... :?


могу предложить просто посмотреть хелп на ANSI SQL - что какбы в стандарте есть то и в АВАРе реализовано. По "дефолту" есть обычный JOIN (INNER JOIN) и LEFT JOIN (LEFT OUTER JOIN).

Всё остальное - ИМХО - частное отсупление от станадрта конкретным производителем СУБД.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 11 2005, 14:07 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 09 2004, 11:38
Сообщения: 127
Пол: Мужской
Извяняйте, господа! Шэйм он ми... :oops:

Здраво поразмыслив - все работает.

Просто, после этого запроса я еще фильтровал по полю gjahr:
Code:
DELETE et_outer_join WHERE gjahr NE i_gjahr.


А так как внутреннюю таблицу я заполнял таким способом
Code:
...INTO CORRESPONDING FIELDS OF TABLE et_outer_join

и поле gjahr в ней одно, то писалась туда, надо думать, значение последнего anep-gjahr, а если соответствующей записи не находилось - то NULL. Таким образом, эта связка становится эквивалентна INNER JOIN'у...

Видимо, пора в отпуск... :roll:

_________________
Труд сделал из обезьяны человека, из коня - транспорт... Тут как повезет...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 11 2005, 14:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Voffka написал:
...то писалась туда, надо думать, значение последнего anep-gjahr...
Да-да, поэтому надо очень осторожно использовать CORRESPONDING в JOINах.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB