1

我有 2 个 MySQL 表:termlist 和 blacklist。它们都在“术语”字段上有索引,而黑名单在“状态”字段上有另一个索引。

我想将术语列表中的术语状态更新为状态为“A”的黑名单中的术语状态为“B”,我发出以下 SQL 语句:

update termlist set status = 'B' where term in (select term from blacklist where status = 'A')

它会导致对 termlist 进行全表扫描。我想使用“带有内部连接的更新”,但我不能,因为 select 语句中有 where 子句。

我知道我可以从该 select 语句创建一个临时表,然后使用该临时表更新内部联接,但如果我想多次执行此更新,这有点乏味。

是否有一个更新语句可以在没有全表扫描的情况下完成工作?

4

1 回答 1

2

您可以使用:

update termlist t inner join blacklist b 
    on t.term=b.term
    set t.status = 'B' 
    where b.status = 'A'
于 2015-08-31T16:18:22.873 回答