使用具有相同参数的select或update时受影响的行数不同 - PostgreSQL

Mag*_*ter 4 sql postgresql ansi-sql

我有两个带有相同Join和Where子句的SQL语句,但是我有一个问题,就是select语句给了我不同数量的行(在我的情况下为42),因为update语句会改变(在我的情况下是80,这就是所有行的表).

这是第一个(我用它来检查将受影响的行数):

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
Run Code Online (Sandbox Code Playgroud)

这里是第二个(这使得工作,它将更新表类的一个字段):

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 (!)
Run Code Online (Sandbox Code Playgroud)

第一个和第二个语句之间的区别只是第一行,其他一切都是相同的.

有没有人知道在两个语句中获取相同行数的更改是什么?

Fra*_*ens 5

UPDATE查询与SELECT查询不同,它具有自联接并且因此会触及所有记录.

手册:

请注意,目标表不得出现在from_list中,除非您打算进行自联接