2017-08-15 81 views
3

你好有一種方法可以把它放在一個聲明?如何縮短數據庫表的DELETE語句?

DELETE e_worklist where wbs_element = '00000000000000000054TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000056TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000055TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000261TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000263TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000262TTO'. 
+1

取決於值的來源...... – vwegert

回答

2

IN以上建議答案只對DB-表都有效:

DELETE FROM e_worklist其中wbs_element IN ( '00000000000000000054TTO', '00000000000000000056TTO', '00000000000000000055TTO')。

在您的示例中,您將內部表語句,併爲他們提出IN語法對文字無效。它的工作原理是only with selection tables/ranges,它也需要是populated properly。所以你不能只是包裝文字轉換爲IN條款,你需要做的水木清華這樣的:

ws_wbs-sign = 'I'. 
ws_wbs-option = 'EQ'. 
ws_wbs-low = '00000000000000000054TTO'. 
APPEND ws_wbs TO rt_wbs. 

DELETE e_worklist WHERE wbs_element IN rt_wbs. 

這是麻煩的,的確,並且不會給您帶來簡潔。

然而,正如你的模式是單調的,你可以把你的幻想,並使用正則表達式,例如:

DELETE e_worklist WHERE wbs_element CP '00000000000000000*TTO'. 
1

只要給您的另一條線索。沒有任何範圍表,您還可以通過FILTEREXCEPT實現更好的聲明。文檔是here

您必須複製或製作e_worklist作爲sorted table

data: 
    ls_worklist like line of e_worklist, 
****Ajust your key if necessary 
    lts_worklist like sorted table of ls_worklist with unique key table_line, 
    lth_wbs_element like hashed table of ls_worklist-wbs_element with unique key table_line. 

lts_worklist = e_worklist. 

****Add your other values if necessary 
lth_wbs_element = value #((|00000000000000000054TTO|) (|00000000000000000263TTO|)). 

e_worklist = filter #(lts_worklist except in lth_wbs_element where wbs_element = table_line). 
+0

實際上,FILTER運算符從7.4開始。它只是編碼格式的另一種方式 – Allen

1

由於它是一個內部表,與數據庫命令不同,通過減少DELETE命令的數量並不會影響性能。您可以使它更簡潔:

DELETE e_worklist where wbs_element =: '00000000000000000054TTO', 
             '00000000000000000056TTO', 
             '00000000000000000055TTO', 
             '00000000000000000261TTO', 
             '00000000000000000263TTO', 
             '00000000000000000262TTO'.