我得到了两个MySQL表:termlist和blacklist。它们都在字段"term"上有索引,黑名单在字段"status"上有另一个索引。
我想更新术语列表中的状态,也出现在黑名单中,状态为'A',到'B',我发出这个SQL语句:
update termlist set status = 'B' where term in (select term from blacklist where status = 'A')
将导致对termlist进行全表扫描。我想使用'update with inner join',但我不能,因为在select语句中有一个where子句。
我知道我可以从select语句中创建一个临时表,然后更新临时表的内连接,但如果我想多次更新这个表,这有点乏味。
是否有一个单独的更新语句可以在不扫描全表的情况下完成工作?
您可以使用:
update termlist t inner join blacklist b
on t.term=b.term
set t.status = 'B'
where b.status = 'A'