【发布时间】:2011-08-31 16:12:32
【问题描述】:
我运行了以下查询,它应该有一个 where 子句,但我忘了添加它:
UPDATE
tblFormElementInstances as fei
JOIN
tblFormElements as fe using(intFormElementId)
SET
fei.intStep = 1
AND
fei.intDivisionId = 1 OR fei.intDivisionId IS NULL);
MySQL 返回以下消息:
--查询正常,影响 42 行(0.06 秒)
--匹配行:94 更改:42 警告:0
我原以为它会引发语法错误,但事实并非如此。此外,该表中有 96 行,具有不同的 intDivisionIds(即不仅仅是 1 或 NULL),这表明 MySQL 完成了一些过滤(匹配的行数 = 94)。
另外,intStep 实际上改为 0,而不是 1。
有谁知道:
1) 为什么这个查询有效?
2) 为什么将 intStep 更改为 0 而不是 1?
3) 为什么不匹配所有 96?
(更改为 42 的计数是因为某些行已经有 intStep = 1。)
【问题讨论】:
-
这里必须有语法错误,因为右括号不匹配。
-
是的,抱歉,AND 后面有一个括号,我在粘贴查询时必须删除它。