4

我有两个具有相同 Join 和 Where 子句的 SQL 语句,但我遇到的问题是 select 语句给了我不同数量的行(在我的情况下为 42),因为更新语句将更改(在我的情况下为 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

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

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 (!)

第一条和第二条语句的区别只是第一行,其他都一样。

有谁知道要在两个语句中获得相同数量的行会发生什么变化?

4

2 回答 2

5

UPDATE 查询与 SELECT 查询不同,它有一个自连接,因此会触及所有记录。

手册

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

于 2011-09-06T09:07:31.973 回答
3

你想要的是

UPDATE classes
   SET CL_Status = 3
  FROM programs 
 WHERE classes.Pr_ID = programs.Pr_ID
   AND programs.Ma_ID = 8
于 2011-09-06T09:50:59.947 回答