2015-09-06 46 views
0

我有一個SQLite3數據庫〜10,000行數據。從SQLite3刪除重複的行

的模式是這樣的:

id, stock_id, body, stock_created_at, symbol, updated_at, created_at

的PK是id沒有FK

你可以說有,如果stock_id被複制一個副本。

我有一個MySQL查詢像這樣的我用,但它是MySQL和SQLite的不是:

DELETE FROM stocks WHERE id NOT IN 
    (SELECT MAX(id) FROM table GROUP BY stock_id); 
+0

那麼是什麼問題?這個'MySql'查詢不適用於'Sqlite'? – Darpan

+0

@Darpan正好 – theGreenCabbage

回答

2

中使用sqlite3(SQLite的版本3.8.10.2二零一五年五月二十日18時17分一十九秒):

sqlite> create table test (id int, stock_id int, symbol text); 
sqlite> insert into test values (1, 1, 'GOOG'); 
sqlite> insert into test values (2, 1, 'GOOGL'); 
sqlite> insert into test values (3, 2, 'AAPL'); 

sqlite> select * from test; 
id   stock_id symbol 
---------- ---------- ---------- 
1   1   GOOG 
2   1   GOOGL 
3   2   AAPL 

sqlite> delete from test 
    ...> where id in (
    ...> select max(id) from test 
    ...> group by stock_id 
    ...> having count(*) > 1 
    ...>); 

sqlite> select * from test; 
id   stock_id symbol 
---------- ---------- ---------- 
1   1   GOOG 
3   2   AAPL 

如果庫存表是一個完全不同的表,相同的概念工作得很好:

sqlite> create table stock (stock_id int); 
sqlite> insert into stock values (1); 
sqlite> insert into stock values (2); 
sqlite> insert into stock values (3); 
sqlite> delete from stock 
    ...> where stock_id in (
    ...> select max(id) from test 
    ...> group by stock_id 
    ...> having count(*) > 1 
    ...>); 
sqlite> select * from stock; 
stock_id 
---------- 
1 
3 

這種查詢是否適合您?如果沒有,您使用的是哪種SQLite版本,並且可以使用示例數據編輯您的問題?

+0

工作完美!謝謝。我的行數比我原先想象的要少。 – theGreenCabbage