我正在努力实现以下目标:
我有一个包含两个名为(例如)TableA
和TableB
表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)
任何提示?
由于
答案 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
。