2017-04-07 4 views
0

Teradataのテーブルから最初のn行または最後のn行を削除するとします。しかし、私はこれを行うための正しいクエリを取得していません。誰も私がこれをどうやってできるか教えてもらえますか?私はSQLで働いている場合Teradata:テーブルからn行を削除する

+1

*最初のn行*を定義します。テーブルに*最初の*または*最後の行はありません。これは順序のない一連の行です:-) – dnoeth

+0

最初から最後までの行は何も言いません。 –

+1

* beginまたはlast *をどのように定義しますか? – dnoeth

答えて

0

私はテラでの作業のいずれかの経験を持っていけないが、私はそのように行います:

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

だから私は、顧客表を持っており、このテーブルが得意などが含まれている場合たとえば、主キー列とCustomerNameのと私はそのようになる最初の10行を削除したいと思います:

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

私はそれがsuコマンドで

+0

CustomerIDにORDER BYを指定しないと、TOPは最初に終了するAMPの行を返します。これは、クエリが実行されるたびにランダムな結果を意味します。これは、運用環境で盲目的に実行された場合、望ましくない結果を招く可能性があります。 –

+0

上記のクエリが機能しなかったため、エラーが表示されます。上位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; 
関連する問題