2011-09-06 33 views
4

我有兩個具有相同Join和Where子句的SQL語句,但我遇到了select語句給我不同數量的行(in我的情況42),因爲更新語句將改變(在我的情況下,80,這是表中的所有行)。使用具有相同參數的select或update時受影響的行數不同 - PostgreSQL

這裏是第一個(我用這個來檢查多少行會受到影響):

SELECT COUNT(*) 
    FROM classes AS c 
    INNER JOIN programs AS p 
    ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8; 

--> returns: 32 

和這裏的第二個(這使得工作時,將更新的表類的一個字段) :

UPDATE classes SET Cl_Status = 3 
    FROM classes AS c 
    INNER JOIN programs AS p 
    ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8; 

--> returns: 80 (!) 

第一條和第二條語句之間的區別只是第一條,其他條件都是一樣的。

有誰知道在兩個語句中獲取相同數量的行會發生什麼變化?

回答

3

你想要的是

UPDATE classes 
    SET CL_Status = 3 
    FROM programs 
WHERE classes.Pr_ID = programs.Pr_ID 
    AND programs.Ma_ID = 8 
5

UPDATE查詢與SELECT查詢不同,它具有自聯接並因此會觸及所有記錄。

manual

注意目標表絕對不能出現在from_list,除非 你打算自連接

相關問題