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

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


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

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


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

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