我有 2 个 MySQL 表:termlist 和 blacklist。他们都有字段“术语”的索引,而黑名单在字段“状态”上有另一个索引。
我想将术语列表中的术语状态更新为“B”,这些术语也出现在黑名单中,状态为“A”,我发出此 SQL 语句:
update termlist set status = 'B' where term in (select term from blacklist where status = 'A')
它会导致对 termlist 进行全表扫描。我想使用“使用内部连接更新”,但我不能,因为 select 语句中有一个 where 子句。
我知道我可以从该 select 语句创建一个临时表,然后使用该临时表更新内部连接,但如果我想多次执行此更新,这有点乏味。
是否有一种更新语句可以在不进行全表扫描的情况下完成这项工作?
最佳答案
您可以使用:
update termlist t inner join blacklist b
on t.term=b.term
set t.status = 'B'
where b.status = 'A'
关于mysql - 在MySQL中使用IN子句更新时如何避免全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32315480/