我运行此查询,希望它更新特定交易品种分配的证券名称和交易实体名称,但它使用相同的名称更新了两个表中的每条记录 - 是时候从备份中恢复了!
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 子句没有效果,并且每一行都更新了?
我愚蠢的错,这条线
Securities s ON sa.SecurityId = sa.SecurityId
应该是
Securities s ON s.SecurityId = sa.SecurityId
当然是萨。SecurityId 始终等于 sa。安全 ID,因此所有记录都已更新。这是一个糟糕的问题,因为我认为通过确保 WHERE 子句限制范围来保护我不会清除所有数据。事实上,对于UPDATE或DELETE,我总是先键入WHERE子句。这是个好习惯,但这次没能救我。