首页 > 解决方案 > 需要加快 WHERE NOT EXISTS 查询

问题描述

我相信这会导致 5 分钟到 20 分钟的延迟,具体取决于记录的数量。我需要将它翻译成 LEFT JOIN,但需要一些帮助才能实现它。

qry_arr = array(':bill_type' => "INT");
$sql = "update ".$billing_table." c set c.bill_type = :bill_type";
$sql .= " WHERE  NOT EXISTS (SELECT s.abbreviation FROM   state s WHERE  s.abbreviation = c.out_location)";
$sql .= " and c.out_location != 'UNKNOWN' and c.out_location != ''";

标签: mysqlsqlsubqueryleft-join

解决方案


UPDATE $billing_table c
LEFT JOIN state s ON s.abbreviation = c.out_location
SET c.bill_type = :bill_type
WHERE s.abbreviation IS NULL
AND c.out_location NOT IN ('UNKNOWN', '')

SELECT这与不匹配行的 a 语法基本相同。仅当值不存在时,请参见返回行。只需替换SELECT ... FROMUPDATE,并在之前插入SET子句WHERE

out_location确保您在和上有索引abbreviation


推荐阅读