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_idtable の 2303 行すべてのフィールドをcur_analisesの値で更新する必要がありますcur_clientes.idSELECTただし、そのクエリを次のように変更しようとするとUPDATE、MySQL Workbench によると、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

おそらく、クエリのある時点で一意の値または値のセットに参加していないため、結果セットの非正規化が発生しています。次に、更新を行うと、テーブルのエイリアスとして実際に結合の基準を満たす行のみが更新されます。クエリ内の本当に非正規化されていない結合を知り、それらを修正できるのはあなただけです。

于 2012-12-04T01:35:31.067 に答える