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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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