1

以下查询返回 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表中所有 2303 行的字段更新cur_analisescur_clientes.id. 但是,根据 MySQL Workbench,当我尝试将该SELECT查询转换为以下查询时UPDATE,它只影响 2297 行:

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 行。我究竟做错了什么?

4

1 回答 1

4

您可能没有在查询中的某个点加入唯一值或一组值,从而导致结果集的非规范化。然后,当您进行更新时,它只会更新实际符合别名为 a 的表的连接条件的行。只有您可以知道查询中真正的非非规范化联接并修复它们。

于 2012-12-04T01:35:31.067 回答