2017-04-07 174 views
0

我想從Teradata中的表中刪除前n行或後n行。但是我沒有得到任何正確的查詢。任何人都可以告訴我我該怎麼做?Teradata:從表中刪除n行

+1

定義*前n行*。在表中沒有* first *或* last *行,它是一組無序的行:-) – dnoeth

+0

我的意思是說從開頭或最後一行開始的任何行。 –

+1

你如何定義*開始或最後*? – dnoeth

回答

0

我沒有與Teradata的合作的經驗,但如果我用SQL工作,我將使它像:

Delete From |TableName| where |the ID column Name| 
IN (Select top(n) |the ID column Name| from |TableName|) 

因此,舉例來說,如果我有一個客戶表,該表包含客戶ID爲主鍵列客戶名稱,我想刪除第10行我想是這樣的:

Delete From Customer where CustomerID 
IN (Select top(10) CustomerID from Customer) 

我希望它能夠幫助

+0

如果在CustomerID上沒有ORDER BY,TOP將返回來自首先完成的AMP的行。這意味着每次查詢執行時都會產生一個隨機結果。如果在生產環境中盲目運行,這可能會產生不良後果。 –

+0

上述查詢無法正常工作,並顯示錯誤:子查詢中不支持Top N –

0

前N蘇bselect在刪除中受到限制,而在其他情況下不受限制。

因此,創建一種揮發性表而不是子查詢

create volatile table myDel as ( 
    select id from myTable 
    sample .25 
) with data on commit preserve rows; 
delete T 
from myTable T, myDel D 
where T.id = D.id; 

會刪除數據(順便說一句,樣品有很多的選擇如何構建樣本)

揮發性表和頂部的25% n,以及一些順序標準,您可以清楚地定義頂部/末尾是什麼。

create volatile table myDel as ( 
    select top 3 id from myTable order by col_1 
) with data on commit preserve rows;