- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试运行以下查询:
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 万条记录,但我昨晚上床 sleep 时让它继续运行,今天早上它还没有完成。另外,只是事后的想法:我确实尝试将其纳入交易中,以防事情变得糟糕,所以放入“开始交易;”在本文开始时。
我的印象是这是一个相当常见的问题 - 但不幸的是,我对 SQL 的了解不够,无法接受别人的查询并调整它以满足我自己的需求。 :p
任何人都可以指导我找到一个允许我更新这些记录的解决方案吗?非常感谢。
最佳答案
这可能有效,因此,继续我上面的评论,这是一个答案:
是的,删除“6”和“5”周围的引号,您不希望 MySQL 在每次比较时将 li
列转换为字符串...并创建索引。
CREATE idx_dn_li ON list(dn, li);
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;
索引将使您的 GROUP BY
更快,我认为其中的 li
列也有帮助(正如我所见,在没有记录的情况下)受到影响,您的查询应该只读取索引,但不要相信我的话;) )
关于MySQL:无法在 FROM 子句中指定目标表 'list' 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169463/
在我的应用程序中,我想检测手指按在屏幕上的类型。触摸类型可能是单点触摸或多点触摸。我搜索了很多,但找不到任何东西。 有什么方法可以找到类型吗? 最佳答案 不可能知道哪个手指在某个点,但您肯定可以获得每
以下代码是我一直在尝试用于多点触控的代码。手指一设置正确并在我拖动手指时四处移动。当我触摸并松开手指时,第二个手指出现并消失,但它永远不会移动。知道有什么问题吗? 我已阅读 developers bl
我是一名优秀的程序员,十分优秀!