这里是我的表结构:
“作者”(VARCHAR)| “点”(整数)| “Body”(文字)
作者永远是一样的,身体也是。相同的作者条目会在整个数据库中出现多个不同的主体,所以我不能根据作者进行删除。但是,点列并不总是相同的。我想要保持具有最大点值的行。
我正在使用SQLite3和Python。
感谢
编辑:
我已经试过这一点,但它只是删除所有行。
for row in cur.fetchall():
rows = cur.execute('SELECT * FROM Posts WHERE Author=? AND Body=? AND Nested=? AND Found=?', (row['Author'], row['Body'], row['Nested'], row['Found'],))
for row2 in rows:
delrow = row
if (row['Upvotes'] < row2['Upvotes'] or row['Downvotes'] < row2['Downvotes']):
delrow = row2
cur.execute("DELETE FROM Posts WHERE Author=? AND Body=? AND Upvotes=? AND Downvotes=? AND Nested=? AND Found=?", (delrow['Author'], delrow['Body'], delrow['Upvotes'], delrow['Downvotes'], delrow['Nested'], delrow['Found'],))
dn += 1
print "Deleted row ", dn
我也试过这个,但它没有工作。
cur.execute("DELETE FROM Posts WHERE Upvotes NOT IN (SELECT MAX(Upvotes) FROM Posts GROUP BY Body);")
我也提交所有更改,所以它不是这样。 SQLite3模块安装正确,我可以在数据库上编写。
*蜂鸣声*欢迎回到堆栈溢出,友好的用户。请确保所有问题的措辞都是问题形式。此外,请保持礼貌并记得接受你的问题的答案。祝您有美好的一天。 *哔声* –
你有什么尝试?重复行删除通常使用某种排序功能完成,如ROWNUMBER,按作者和正文进行分区。 – Bort
尝试这样做:http://stackoverflow.com/questions/6165895/delete-duplicate-rows,尤其是Vivek的答案。 (当然,您想切换不等式的方向以获得最大的点值。) –