UPDATE影响的行数少于等效的SELECT

时间:2012-12-04 01:27:37

标签: mysql join sql-update

以下查询返回2303行:

SELECT a.* 
FROM cur_analises a
    INNER JOIN cur_materias_subsidiarias ms
    ON ms.materia_id = a.materia_id
    AND ms.subsidiaria_id IN(SELECT id FROM cur_subsidiarias WHERE cliente_id = 134)
    INNER JOIN cur_materias m
    ON m.id = a.materia_id
    INNER JOIN cur_clientes c
    ON c.carga_id = ms.subsidiaria_id
WHERE a.cliente_id = 134;

我需要使用cliente_id中的值更新表cur_analises中所有2303行的cur_clientes.id字段。但是,当我尝试将SELECT查询转换为以下UPDATE时,它只会影响2297行,根据MySQL Workbench:

UPDATE cur_analises a
    INNER JOIN cur_materias_subsidiarias ms
    ON ms.materia_id = a.materia_id
    AND ms.subsidiaria_id IN(SELECT id FROM cur_subsidiarias WHERE cliente_id = 134)
    INNER JOIN cur_materias m
    ON m.id = a.materia_id
    INNER JOIN cur_clientes c
    ON c.carga_id = ms.subsidiaria_id
SET a.cliente_id = c.id
WHERE a.cliente_id = 134;

我不知道为什么它缺少6行。我做错了什么?

1 个答案:

答案 0 :(得分:4)

您可能无法在查询中的某个位置加入唯一值或值集,从而导致结果集的非规范化。然后,当您执行更新时,它仅更新实际满足表别名的连接条件的行作为a。只有你可以知道你的查询中真正的非非规范化连接是什么并修复它们。