我正在尝试运行以下查询:
update list
set li = '6'
where li = '5'
and dn in ( SELECT dn FROM list GROUP BY dn HAVING COUNT(*) < 2000 )
此查询导致上述错误:
You can't specify target table 'list' for update in FROM clause
因此,我从建议我运行以下命令的人那里得到了建议:
START TRANSACTION;
UPDATE list a
INNER JOIN
(
SELECT dn
FROM list
GROUP BY dn
HAVING COUNT(*) < 2000
) b ON a.dn = b.dn
SET a.li = '6'
WHERE a.li = '5';
此代码运行 - 问题是它永远不会完成。我不确定这是声明本身的问题,还是因为它试图自己处理 400 万条记录,但我昨晚睡觉时让它继续存在,今天早上还没有完成。另外,只是事后的想法:我确实尝试将其放入事务中,以防万一事情变得糟糕,因此投入了“开始事务;” 在这开始。
我的印象是这是一个相当普遍的问题——但不幸的是,我对 SQL 的了解不足以接受别人的查询并对其进行调整以适应我自己的需求。:p
谁能指导我找到允许我更新这些记录的解决方案?非常感激。