2

发生了一些奇怪的 SQL。这是查询:

UPDATE sugarcrm.qb_salesorders_leads_c c
JOIN qb_salesorders orders ON c.qb_salesorders_leadsqb_salesorders_idb = orders.id
SET c.qb_salesorders_leadsleads_ida = orders.memo
AND c.qb_salesorders_leadsqb_salesorders_idb = orders.id

所以当我运行这个时,我会受到 0 行的影响。现在,如果我将 AND 替换为 ,那么它会返回并显示 354 行受影响。

现在您会认为,当我使用 运行相同的确切查询时,它会给我相同的结果。错误的。它回来时有 0 行受到影响。

之后,我可以将 , 更改为 AND 并且它再次起作用。

我是否发现了 MySQL 错误或者我在这里遗漏了什么?

4

3 回答 3

1

AND 不是您尝试执行的有效语法。使用逗号分隔您尝试更新的每一列。

于 2012-05-22T20:57:53.127 回答
1

第一次使用逗号运行语法正确的查询时,它正确影响了 354 行。它第二次返回 0 行受影响的原因是这些行在您第一次运行查询时已经更新。

如果查询不会更改列值UPDATE,则 MySQL 不会更新行,并且不会将它们计入受影响的行中。只有那些值实际发生变化的才会被计算在内。

于 2012-05-22T20:59:15.653 回答
0

您已经加入 c.qb_salesorders_leadsqb_salesorders_idb = orders.id。因此,如果您使用“AND c.qb_salesorders_leadsqb_salesorders_idb = orders.id”来过滤您的结果,这既是不正确的语法,也是不必要的,因为这在 JOIN 子句中得到了处理。

如果要设置 AND 子句中指定的字段,则联接将仅更新那些值已经相等的行(基于您的联接)。我在这里看到的唯一更正是您只需要删除“AND”子句,因为它除了导致查询本身出错之外没有任何作用:

 UPDATE sugarcrm.qb_salesorders_leads_c c 
 JOIN qb_salesorders orders ON c.qb_salesorders_leadsqb_salesorders_idb = orders.id 
 SET c.qb_salesorders_leadsleads_ida = orders.memo

此外,要更新多个字段,它们应该用逗号分隔(而不是 AND):

UPDATE sugarcrm.qb_salesorders_leads_c c 
JOIN qb_salesorders orders ON c.qb_salesorders_leadsqb_salesorders_idb = orders.id 
 SET c.qb_salesorders_leadsleads_ida = orders.memo, c.anotherfield = "new value"
于 2012-05-22T21:02:59.790 回答