2015-09-06 47 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