2012-12-04 18 views
0

下面的查詢返回2303行:UPDATE影響比同等更少的行選擇

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; 

我需要從表cur_analisescur_clientes.id值更新所有2303行的cliente_id領域。然而,當我試圖把這一SELECT查詢到以下UPDATE,它不僅影響2297行,根據MySQL工作臺:

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

這些行中的六行是否已經具有要設置的值? –

+0

不,它們是在上一個查詢中由'auto_increment'生成的新ID。 – bfavaretto

回答

2

您可能不會在查詢中的某個點加入唯一值或一組值,導致結果集的非規範化。然後,當您執行更新時,它只會更新實際滿足表別名的連接條件的行。只有你可以知道你的查詢中真正的非規範化連接,並修復它們。

+0

看來你是對的,我正在研究它。 – bfavaretto

+1

你說得對。發現要更新的正確行數是2292,我被十一行關閉了。 – bfavaretto

+0

這件事即將毀掉我的一天,無聲的咒罵已經開始 –

相關問題