带有JOIN的MySQL UPDATE意外更新了表中的每一行

时间:2016-01-30 22:18:57

标签: mysql

我运行此查询,希望它更新特定符号分配的安全名称和交易实体名称,而是更新两个表中具有相同名称的每条记录 - 从备份恢复的时间!

UPDATE 
    SymbolAssignments sa
       JOIN
    Securities s ON sa.SecurityId = sa.SecurityId
       JOIN
    TradingEntityNames en ON s.TradingEntityNameId = en.TradingEntityNameId
SET 
    s.Name = name,
    en.Name = name
WHERE 
    sa.SymbolAssignmentId = symbolAssignmentId;

任何人都可以解释为什么WHERE子句没有效果,并且每一行都被更新了吗?

1 个答案:

答案 0 :(得分:0)

我的愚蠢错误,这一行

Securities s ON sa.SecurityId = sa.SecurityId

应该是

Securities s ON s.SecurityId = sa.SecurityId

当然sa.SecurityId总是等于sa.SecurityId,因此所有记录都已更新。这是一个糟糕的问题,因为我认为通过确保WHERE子句限制范围来保护我免于擦除所有数据。事实上,对于UPDATE或DELETE,我总是先输入WHERE子句。这是一个好习惯,但这次没有拯救我。