以下查询返回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行。我做错了什么?
答案 0 :(得分:4)
您可能无法在查询中的某个位置加入唯一值或值集,从而导致结果集的非规范化。然后,当您执行更新时,它仅更新实际满足表别名的连接条件的行作为a。只有你可以知道你的查询中真正的非非规范化连接是什么并修复它们。