SAPфорум.RU
https://www.sapboard.ru/forum/

В какой запрос к БД превращается запрос на ABAP-е?
https://www.sapboard.ru/forum/viewtopic.php?f=13&t=100310
Страница 1 из 1

Автор:  swd [ Чт, мар 23 2023, 10:40 ]
Заголовок сообщения:  В какой запрос к БД превращается запрос на ABAP-е?

Здравствуйте
В запросе 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, если в ней есть записи, а второй - без него. А можно ли одним запросом, потому что список_условий может быть большим?

Автор:  LKU [ Чт, мар 23 2023, 10:48 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

Непонятно, зачем вам переизобретать велосипед, но по сути FAE динамически формирует содержимое условия where.

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

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

Автор:  swd [ Чт, мар 23 2023, 10:55 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

LKU написал:
Не понятно, зачем вам переизобретать велосипед, но по сути FAE динамически формирует содержимое условия where.

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

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

Автор:  LKU [ Чт, мар 23 2023, 12:26 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

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

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

Автор:  broker.chelny [ Чт, мар 23 2023, 12:55 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

А кто вам мешает сделать так:
Code:
where ( filed1 = @field1 OR @field1 = '' ) and ( filed2 = @field2 OR @field2 is null ) (

?

Автор:  UKY [ Пт, мар 24 2023, 10:54 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

FAE в СУБД можно просто заменить на JOIN

Автор:  LKU [ Пт, мар 24 2023, 16:40 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

В общем, если доступ к SAP еще есть, то пишите селект с FAE и смотрите во что он превратился на уровне запроса к БД в тр. ST05.
Думаю, на примерах всё будет наглядно видно.

Автор:  Kengur [ Сб, мар 25 2023, 01:22 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

Похоже что это какое то задание на собесе.

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

Автор:  olegbash [ Вт, мар 28 2023, 19:29 ]
Заголовок сообщения:  Re: В какой запрос к БД превращается запрос на ABAP-е?

на оптимальность не претендую, (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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/