2016-08-18 30 views
0

我尝试更新使用INNER JOIN像这样的表(dummy.ID设置主键):MySQL的sql_safe_update恒定误差

UPDATE dummy 
INNER JOIN original 
    ON dummy.FirstName =original.FirstName 
    AND dummy.LastName = original.LastName 
SET dummy.col1 = original.col1 
WHERE dummy.ID <> 0; 

SQL_SAFE_UPDATE激活,而不是被alowed以任何方式来禁用它,因为上述声明我得到着名的错误:You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

我试过WHERE KEY IN (,),WHERE KEY NOT NULL,以及其他很多实现WHERE子句的方法,但是所有的东西都失败了,出现了同样的错误。它工作的唯一方法是使用WHERE dummy.ID = 1,但是这当然只更新一行。

难道是因为我用了JOIN?有没有办法在不禁用sql_safe_update的情况下执行此更新?

+0

那么'ID'列是关键吗? –

+0

是的,在我的帖子中说,它是 – MRM

回答

0

我设法找到答案,所以如果其他人与我自己有同样的问题,我会发布答案。 问题在于JOIN的使用,由于某些原因,编译器根据sql_safe_update将其识别为错误使用的WHILE

UPDATE dummy 
SET col1 = 
(
    SELECT col1 FROM original 
    WHERE dummy.FirstName = original.FirstName 
     AND dummy.LastName = original.LastName 
) 
WHERE dummy.ID <> 0;