Possible Duplicate:
Delete duplicate rows
这是我的表结构:
“作者”(varchar)|“点”(整数)|“正文”(文本)
作者总是一样的,身体也是一样的。同一个作者条目将在数据库中多次出现,具有不同的主体,因此我不能根据作者删除。但是,points列并不总是相同的。我要保留最大点值的行。在
我使用的是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
我也试过这个,但没用。在
^{pr2}$我也在做所有的改变,所以不是这样。SQLite3模块安装正确,我可以在数据库上写。在
不幸的是,在SQLite3中,您没有像
partition over row
这样的好函数,因此无法在一个查询中完成它,所以您要么按程序执行,要么迭代执行。在出于性能原因,我建议您提取完整的删除潜力列表,然后集体删除,例如
然后在Python应用程序中,遍历结果集,并存储Author/Body组合框的所有非第一行id(考虑CTRL-BREAK样式编程),一旦构建完集合,就删除行id。在
由于您要删除除最高点之外的所有值,以下操作将很好地完成:
这是一个与自身的基本连接,然后删除所有具有相同作者和正文但具有较低值的值。在
SqlFiddle在这里:http://sqlfiddle.com/#!7/64d62/3
注意:一个警告是,如果多个author/body对具有相同的max point值,那么所有这些值都将被保留。在
我还没有测试过,但这可能会起作用:
首先以SELECT查询的形式运行它,看看它是否能保持您想要的结果。在
相关问题 更多 >
编程相关推荐