有一些奇怪的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替换AND,那么它会回来并说354行受到影响。
现在你会想到当我用它运行相同的确切查询时,它会给我相同的结果。错误。它回来了0行受影响。
之后,我可以将,更改为AND,然后再次运行。
我是否发现了MySQL Bug或者我在这里遗漏了什么?
答案 0 :(得分:1)
AND不是您尝试执行的操作的有效语法。使用逗号分隔您尝试更新的每个列。
答案 1 :(得分:1)
第一次使用逗号运行语法正确的查询时,它正确地影响了354行。它第二次返回0行的原因是第一次运行查询时行已经更新。
如果UPDATE
查询不会更改列值,MySQL将不会更新行,并且不会在受影响的行中计算它们。只计算其值实际发生变化的人。
答案 2 :(得分: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"