gpt4 book ai didi

mysql - 可以从MySQL删除中消除 "NOT IN"子查询吗?

转载 作者:行者123 更新时间:2023-11-30 00:11:19 24 4
gpt4 key购买 nike

我有两个 InnoDB 表,我们称它们为 tableD 和 tableC。 TableD 的行带有名为 id 的 varchar 主键。 TableC 的行包含一个名为 seq 的 BIGINT 主键和另一个名为 f_id 的 varchar 列。 f_id的值不是唯一的,并且对应于tableC中的id列。

我想要实现的是删除 tableD 中的所有行,但与 tableC 中任何行中的 f_id 列匹配且 seq 列值大于特定值的行除外。

这是我现在的查询:

delete d from tableD as d
where d.id not in (
select c.f_id from tableC as c
where seq>1401399893702598
);

虽然这可以完成工作,但该查询将针对大型表运行,在数十 GB 范围内,包含数百万行。它不需要是实时的,但越快越好。所以我试图找出是否可以消除这个子查询,可能用连接替换它。我认为我必须将其保留为单个查询,因为可以随时将行添加到任一表中,并且不应因任何原因删除这些新行。

到目前为止,我的所有尝试都失败了。我得到的关闭是以下查询,它仅删除我想要保留的行并保留其他所有内容:

delete d from tableD as d
left join tableC as c on d.id=c.f_id
where c.seq>1401399893702598;

我使用的是 MySQL 5.6。

最佳答案

您需要将 seq 上的条件移至 on 子句,并测试 where 子句中是否没有匹配项:

delete d
from tableD as d left join
tableC as c
on d.id = c.f_id and c.seq > 1401399893702598
where c.f_id is null;

关于mysql - 可以从MySQL删除中消除 "NOT IN"子查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026326/

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