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/ |