Текущее время: Чт, мар 28 2024, 16:08

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Чт, мар 23 2023, 10:40 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
Здравствуйте
В запросе select ... for all entries in ... where ... если во внутренней таблице нет записей, то выбираются все записи из таблицы в списке from, а если в ней есть записи, то выбираются только те записи, которые удовлетворяют условию связи с внутренней таблицей.
Как сделать то же самое на обычном SQL?
Code:
CREATE TABLE #t
(
    id uniqueidentifier
)

--insert into #t
--select top 10 ContractID
--from contract

SELECT *
FROM contract
WHERE список_условий AND ???

DROP TABLE #t

Что написать вместо "???", чтобы сделать следующее:
1. Если в таблице #t есть записи, то из contract выбирать только те, которые удовлетворяют списку_условий И идентификаторы которых есть в #t (т.е. как будто есть условие where ContractID in (select id from #t) или #t подвязана к contract через inner join).
2. Если в таблице #t нет записей, то из contract выбрать все записи, удовлетворяющие списку_условий.
Понятно, что можно написать 2 запроса: один с inner join #t, если в ней есть записи, а второй - без него. А можно ли одним запросом, потому что список_условий может быть большим?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Чт, мар 23 2023, 10:48 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Непонятно, зачем вам переизобретать велосипед, но по сути FAE динамически формирует содержимое условия where.

Если очень хочется, то можно точно так же динамически собрать текст where абапом и подставить его в ваш селект.
Только если захотите повторить FAE, то как минимум есть еще две вещи, которые понадобится учесть:

1. FAE разбивает запросы на пачки и потом объединяет результаты.
2. FAE по сути к результирующему набору данных применяет операцию distinct.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Чт, мар 23 2023, 10:55 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
LKU написал:
Не понятно, зачем вам переизобретать велосипед, но по сути FAE динамически формирует содержимое условия where.

Если очень хочется, то можно точно так же динамически собрать текст where абапом и подставить его в ваш селект.
Только если захотите повторить FAE, то как минимум есть еще две вещи, которые понадобится учесть:
1. FAE разбивает запросы на пачки и потом объединяет результаты.
2. FAE по сути к результирующему набору данных применяет операцию distinct.

Так мне ж не в Абапе надо это сделать, а в процедуре SQL Server. Просто помню, что в Абапе такое есть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Чт, мар 23 2023, 12:26 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
swd написал:
Так мне ж не в Абапе надо это сделать, а в процедуре SQL Server. Просто помню, что в Абапе такое есть.

Ну, телепатов на сапфорум не завезли, я не мог догадаться, что вы хотите что-то сделать в SQL Server (MS SQL Server?)
Вам тогда надо на форумы по этому продукту, а не SAP.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Чт, мар 23 2023, 12:55 
Специалист
Специалист

Зарегистрирован:
Чт, дек 16 2010, 15:23
Сообщения: 131
Откуда: Набережные Челны
Пол: Мужской
А кто вам мешает сделать так:
Code:
where ( filed1 = @field1 OR @field1 = '' ) and ( filed2 = @field2 OR @field2 is null ) (

?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Пт, мар 24 2023, 10:54 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 179
FAE в СУБД можно просто заменить на JOIN


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Пт, мар 24 2023, 16:40 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
В общем, если доступ к SAP еще есть, то пишите селект с FAE и смотрите во что он превратился на уровне запроса к БД в тр. ST05.
Думаю, на примерах всё будет наглядно видно.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Сб, мар 25 2023, 01:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Похоже что это какое то задание на собесе.

Что написать вместо "???", чтобы сделать следующее: - мы земляне так не общаемся. Так только рептилойды общаются.

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: В какой запрос к БД превращается запрос на ABAP-е?
СообщениеДобавлено: Вт, мар 28 2023, 19:29 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
на оптимальность не претендую, (NOT) EXISTS и SELECT 1 from tab - работают довольно быстро.


select contract_main.id from contract_main
where ( contract_main.col1 LIKE '%' ) -- какое-то условие, которое хрен знает почему нельзя было обернуть в переменную (на уровне БД тоже есть переменные ))
AND
( contract_main.id in ( SELECT id from tmp_con ) and EXISTS ( SELECT 1 from tmp_con ) )
or
( contract_main.id > 0 and NOT EXISTS ( SELECT 1 from tmp_con ) )
;

Проверял на таких данных:

CREATE TABLE "contract_main" (
"id" INTEGER NOT NULL,
"col1" TEXT NOT NULL,
"col2" TEXT NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT)
)

CREATE TABLE "tmp_con" (
"id" INTEGER NOT NULL,
PRIMARY KEY("id" AUTOINCREMENT)
)


INSERT INTO "main"."contract_main" ("id", "col1", "col2") VALUES ('1', 'contract1', 'contract2');
INSERT INTO "main"."contract_main" ("id", "col1", "col2") VALUES ('2', 'con2', 'con33');
INSERT INTO "main"."contract_main" ("id", "col1", "col2") VALUES ('3', 'con31', 'con32');

INSERT INTO "main"."tmp_con" ("id") VALUES ('1'); -- VideoGame with DELETE and INSERT


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

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


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

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


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

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