2014-02-21 18 views
2

我有5000行數據。我想在1000年後刪除所有行,我該怎麼做?刪除所有行在一定數量後

Delete from table 
where * 
limit 1000 

這是正確的嗎?

+0

哪個數據庫?甲骨文? Sql Server? MySQL的?其他? –

+0

你關心哪些行被刪除,或者只要有4000個被刪除,它們就可以是任意的行嗎? –

+0

SQL SERVER對不起 –

回答

2

SQL Server

WITH cte 
    AS (SELECT *, 
       row_number() OVER (ORDER BY some_column) AS rn 
     FROM TABLE) 
DELETE FROM cte 
WHERE rn > 1000 
+0

完美的作品謝謝。 –

+1

@MartinSmith對不起,我有一個腦屁! –

1
DELETE FROM TABLE 
WHERE ID NOT IN 
(
    SELECT ID FROM TABLE LIMIT 1000 
) 

這個查詢:

1 - 從數據庫

2選擇第1000個記錄 - 刪除所有不在的前100條記錄列表中的記錄

+0

我在'1000'附近得到錯誤的語法。 –

+0

SKIP支持firebird DBMS,那是我的錯。 請嘗試使用偏移,並讓我知道 –

+0

已更新的答案,它現在可以工作 –

0

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE test (A) AS 
SELECT LEVEL 
FROM DUAL 
CONNECT BY LEVEL <= 5000; 

查詢1

SELECT COUNT(*) FROM test 

Results

| COUNT(*) | 
|----------| 
|  5000 | 

查詢2

DELETE FROM test 
WHERE A IN (SELECT A FROM (SELECT A, ROWNUM rn FROM test) WHERE rn > 1000) 

Results

查詢3

SELECT COUNT(*) FROM test 

Results

| COUNT(*) | 
|----------| 
|  1000 |