Текущее время: Вс, июл 27 2025, 22:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 07:16 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Добрый день!
Вот такая дурацкая проблема ((
Необходимо из таблиц BSIS и BSAS выбрать перечень всех значений поля xref3 без повторений.
Для этого пишу два селекта:

1.
Code:
  SELECT  xref3 FROM BSIS INTO CORRESPONDING FIELDS OF int_BSIS   " Берем отдельный XREF3
         WHERE NOT EXISTS  ( SELECT *  FROM BSAS
                                  WHERE XREF3 = int_bsis-XREF3 and
                                  xref3 like '200%' and
                                  XREF3 IS NOT NULL ) AND
                XREF3 like '200%' and
                XREF3 IS NOT NULL
                GROUP BY XREF3
                ORDER BY XREF3.
     .....
  ENDSELECT.

2.
Code:
  SELECT  xref3 FROM BSAS INTO CORRESPONDING FIELDS OF int_BSAS   " Берем отдельный XREF3
         WHERE
                XREF3 like '200%'
                GROUP BY XREF3
                ORDER BY XREF3.
   .....
  ENDSELECT.


Вопрос вот в чем. Первый селект находит запись со значением поля xref3 =200850000302310001. Но почему и второй селект находит запись с таким же значением поля xref3?
Насколько я понимаю, выборки двух указанных селектов не должны пересекаться...

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 07:32 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, фев 17 2006, 07:38
Сообщения: 99
Попробуйте в подзапросе написать вместо
Code:
WHERE XREF3 = int_bsis-XREF3 ...

Code:
WHERE XREF3 = bsis~XREF3 ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 08:02 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
2vahtang
Спасибо! Кажется получилось! ))))

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 08:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
А не проще ли сделать простые выборки без подзапросов по BSIS и BSAS, а затем отсортировать внутреннюю таблицу по XREF3 и воспользоваться DELETE ADJACENT DUPLICATES? :?

ЗЫ: XREF3 - не ключевое поле. Почему оно не может быть одинаковым для разных документов? :)

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 08:58 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
xref3 ссылочное поле, связывающее документ поступления материала и счет-фактуру к нему. А также может связывать со сторно того и другого. Задача написать отчет по неотфактурованным поступлениям мтериала. Для этого мне необходим список всех значений XREF3, чтобы выбирать из таблиц BSIS и BSAS документы связанные одним xref3.
Тоесть используя два этих селекта я сначала перебираю все XREf3 попадающие в BSIS и вместо троеточия в теле селекта я делаю выборку из таблиц bsis и bsas материалов с одним xref3 и считаю сумму неотфактуровки.
Потом также с xref3 попадающими в BSAS.
И я считаю, что LOOP по внутренней таблице работает медленнее чем select по прозрачной.

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 10:56 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Конструкция SELECT ... ENDSELECT - зло.
Ваши выборки обернутся FULL TABLE сканом.
Послушайте Удава и сделайте через внутренние таблицы. Только я бы вмсето "отсортировать по XREF3 и воспользоваться DELETE ADJACENT DUPLICATES" сделал SELECT DISTINCT изначально.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 11:11 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
в opensql вложенный запрос всегда отрабатывает по каждой строке,
даже если этот запрос без where


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 19:02 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 07 2006, 12:48
Сообщения: 76
Пол: Мужской
Сорри если обижу, но:
1) Пример кода очень плох, надо азы подучить и решение опыт подскажет. Автору нужна удочка, а не рыба.
2) (Подробнее о 1-ом). Order и Group убери (во внутренней табличке поиграешся, пусть бд просто выбирает и передает Тебе данные без разных преобразований, но есть конечно же исключения). Если у Вас ритейл - то будет плохо (И кстати это нужно уточнять, т.к. имеет не важную роль для таблиц с бух. документами). Если проверяешь на like, то is not null уже не надо. Select ... end Select лучше убери и все во внутрннюю табличку. и попытайся подстроиться под свое select, обьяви табличку и нужными полями и в нужной последовательности (лучше без Corresponding fields).

Good Luck!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 19:07 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
WhiteScorpio написал:
Если проверяешь на like, то is not null уже не надо.
Сама проверка на not null выглядит сомнительно, так как, в принципе, поле может быть и initial(т.е. SPACE)

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Ср, мар 04 2009, 19:13 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
После нескольких экспериментов, сделал всетаки как говорил г-н Удав, через внутреннюю таблицу. Все замечательно работает.
Ну а по поводу опыта согласен, не хватает и очень сильно ))
Всем спасибо!

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как работает sql запрос с использованием NOT EXISTS
СообщениеДобавлено: Чт, мар 05 2009, 17:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Пономарев Артем написал:
Только я бы вмсето "отсортировать по XREF3 и воспользоваться DELETE ADJACENT DUPLICATES" сделал SELECT DISTINCT изначально.

ADJACENT DUPLICATES все равно нужен в случае, когда записи с одинаковым XREF3 есть и в BSIS, и в BSAS.
Но DISTINCT можно добавить :D

_________________
С уважением,
Удав.


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

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


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

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


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

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