Текущее время: Пн, июл 28 2025, 12:02

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 09 2008, 09:39 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 10 2006, 08:44
Сообщения: 320
Откуда: Odessa
Могу чуть по подробней:
ZDTAB_1 = 11 289 записей
ZDTAB_2 = 249 662 записей
ZDTAB_3 = 249 701 записей

SELECT
TAB_1~f1
TAB_2~g1
TAB_2~g2
TAB_2~g3
TAB_3~s1
INTO (rf1, rg1, rg1, rg1, rs1)
FROM ZDTAB_1 AS TAB_1
JOIN ZDTAB_2 AS TAB_2
ON TAB_1~f1 = TAB_2~g4
LEFT JOIN ZDTAB_3 AS TAB_3
ON TAB_3~s2 = TAB_2~g3

WHERE TAB_1~f2 like '2008%'.

if rs1 = SPACE. " TAB_3~s1 <> SPACE

endif.


ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемма с LEFT JOIN...
СообщениеДобавлено: Ср, июл 09 2008, 18:29 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Моха написал(а):
А никто не знает, почему такое ограничение?


Цитата:
Since not all of the database systems supported by SAP themselves support the standard syntax and semantics of the left outer join, the syntax has been restricted to those cases that return the same solution in all database systems.

https://www.sdn.sap.com/irj/sdn/thread?threadID=495617

Primat написал(а):
Могу чуть по подробней


Вообще-то главная отсутствующая подробность тут - это primary key таблиц...

Кроме того, IMHO имеет значение не только общее кол-во записей в таблице, но и сколько записей вы ожидаете получить в результате выборки. Например, конструкция SELECT ... ENDSELECT оправдана если вы ожидаете выбрать что-то порядка сотни тысяч записей. А если, скажем речь идет о паре сотен, то я бы рекомендовала SELECT INTO TABLE. Соответственно потом просто делается DELETE FROM TABLE WHERE s1 = space и все дела.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемма с LEFT JOIN...
СообщениеДобавлено: Пт, июл 11 2008, 16:10 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Моха написал(а):
Jelena написала:
Если вы присоединяете таблицу с помощью LEFT JOIN (т.е. у вас это ZDTAB_3), то никакие поля из нее не могут фигурировать в WHERE.
А никто не знает, почему такое ограничение? В других реализациях SQL вроде бы такого нет.
Т.е. есть ли некий практически разумный смысл в этом ограничениии или просто так исторически сложилось?


А в OpenSQL вобще есть определенные ограничения по сравнению со стандартом SQL для совместимости с разными СУБД, ведь запросы OpenSQL преобразуются в родной SQL СУБД интерфейсом БД на ApServ. Типа чтобы система встала на всякие различные СУБД, которые могут не поддерживать все возможности стандарта.

Типа того.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемма с LEFT JOIN...
СообщениеДобавлено: Пн, ноя 24 2008, 10:25 
Специалист
Специалист

Зарегистрирован:
Ср, сен 08 2004, 16:04
Сообщения: 112
Откуда: Ukraine
Пол: Мужской
Jelena написала:
Primat написал(а):
Все таблицы имеют >= 250 000 записей и выбрасывать какое-то условия, чревато увеличением времени отработки запроса.


Ну, в таком случае наверное имеет место, пардон, ситуация "как не ложись - все равно отымеют". Кстати, раз уж таблицы Z, то может вообще надо бы их дизайн пересмотреть? :?


Интересно посмотреть как вы будете пересматривать дизайн таблицы на работающем проекте :lol: .

Цель, я так понял, состоит в том, чтобы получить результат по запросу порядка 10 или 100

По поводу 3-х вариантов.
1. бОльшее количество записей - зло. Выборка большОго количества записей (порядка 10000) во внутреннюю сильно грузит систему. Время слишком большое.
2. Отдельный запрос - тоже нехорошо. Цикл по 250 000 записям и запрос на каждую из них в таблицу из 250 записей - Это просто писец.
3. Подзапрос - меньшее зло из вышеперечисленных. Т.к. по времени наиболее оптимален.
Есть еще 4-й вариант с Native SQL(как уже раньше говорилось) - это уже интересно с точки зрения времени выполнения :).

Дальше можно не читать :lol:
Как там товарищи ни говорят по 3-х ступенчатость системы, но нужно понимать, что сервер базы данных куда более лучше справится с правильным запросом. Чем потом иметь секас на сервере приложений с большой внутренней таблицей и кучей маленьких запросов. Спросить это у более опытных людей, скажем, кто работал на Oracle. Они вам покажут запросы на 10 килобайт, в котором стока логики заложено, что вам придется писать прогу на abap на 1000 строк :) Сорри за оффтоп :lol:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

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


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

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


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

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