SQLite - 分别从2个表中保留最新的10行

时间:2018-04-06 15:18:36

标签: sql sqlite

我正在努力实现以下目标:

我有一个包含两个名为(例如)TableATableB

的表的数据库

表A,有一个名为&#34的列; someID"

表B,有一个名为" tableA_ID" 的列,与TableA.someID字段有关。

我想保留最后插入的10行Table A,并删除其余内容,并在Table B上执行相同操作,删除与10 rows匹配的所有内容; s未从Table A(最新10)删除

我已经读过这可以通过INNER JOINS来完成,但我对SQL没什么经验,而且我很难用这个。

我尝试过以下操作,但在tableB

删除的同时无法从tableA删除

DELETE FROM TableA WHERE id NOT IN (SELECT id FROM TableA ORDER BY id DESC LIMIT 10)

任何提示?

由于

1 个答案:

答案 0 :(得分:1)

假设您的ID已按顺序排列,

SELECT someID FROM TableA ORDER BY someID DESC LIMIT 10

会给你最新的10行。然后你可以将它用作子查询:

DELETE FROM TableA WHERE someID NOT IN
(
    SELECT someID FROM TableA ORDER BY someID DESC LIMIT 10
);
DELETE FROM TableB WHERE tableA_ID NOT IN
(
    SELECT someID FROM TableA
);

如果您希望两个DELETE同时发生,则必须在事务中执行它们。你如何做到这一点取决于你正在使用的RDBMS。

将来,我强烈建议您FOREIGN KEY CONSTRAINT上的TableB引用someID中的TableA列。如果你这样做,你应该能够DELETE CASCADE CONSTRAINTS