gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:19:23 25 4
gpt4 key购买 nike

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

我有一个包含 2 个名为(例如)TableA 的表的数据库和 TableB
表 A 有一个名为“someID” 的列

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

我想保留最后插入的 10 行 Table A ,并删除其余部分,并对 Table B 执行相同操作,删除除 10 rows 之外的所有内容与未从 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)
有什么提示吗?

谢谢

最佳答案

假设你的身份证是有序的,

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 s 要同时发生,您必须在事务中执行它们。你如何做到这一点取决于你使用的是什么 RDBMS。

在 future ,我强烈建议制作 FOREIGN KEY CONSTRAINTTableB引用 someID TableA 中的列.如果你这样做,你应该能够 DELETE CASCADE CONSTRAINTS .

关于SQLite - 分别保留 2 个表中的最新 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49696038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com