【问题标题】:Different number of rows affected when using select or update with the same parameters - PostgreSQL使用具有相同参数的选择或更新时受影响的行数不同 - PostgreSQL
【发布时间】:2011-09-06 07:43:39
【问题描述】:

我有两个具有相同 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 (!)

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

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

【问题讨论】:

    标签: sql postgresql ansi-sql


    【解决方案1】:

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

    来自manual

    注意目标表一定不能出现在from_list中,除非 您打算自行加入

    【讨论】:

      【解决方案2】:

      你想要的是

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        相关资源
        最近更新 更多