Текущее время: Пт, апр 19 2024, 21:46

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


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

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


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

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