Postgres SQL SELECT 和更新行为不同

Postgres SQL SELECT and UPDATE behaving differently

我不明白为什么下面的 SELECT 找到 7065 条记录,但更新说它更新了 13935 条记录,这是 table.

中的每条记录

谁能告诉我为什么?

superfrr=# select count(*)  from fromemailaddress LEFT JOIN email ON 
(email.fromemailaddress = fromemailaddress.fromemailaddress) 
WHERE LOWER(email.subject) ~ 'tester';
 count
-------
  7065

但是:

superfrr=# update fromemailaddress set call=true  from fromemailaddress 
 as fea LEFT JOIN email ON (email.fromemailaddress = fea.fromemailaddress)
 WHERE LOWER(email.subject) ~ 'tester';
UPDATE 13935

~ 的使用表明您正在使用 Postgres。如果是这样,这两个查询正在做非常不同的事情。在 Postgres 中,您不会在 from 子句中包含正在更新的 table。

那么,我想你想要:

update fromemailaddress
    set call = true 
    from email
    where email.fromemailaddress = fromemailaddress.fromemailaddress and
          LOWER(email.subject) ~ 'tester';

您的版本正在更新 fromemailaddress 中的所有行,因为没有条件连接 update 子句中的 fromemailaddressfrom 子句中的 fea .

另请注意:left join 是不必要的,因为 where 子句无论如何都会将其变成内部联接。

您必须依靠主键,它将 returns 所有值,因为计数不适用于空值。希望这有帮助谢谢

select count(PrimaryKey Field)  from fromemailaddress LEFT JOIN email ON 

(email.fromemailaddress = fromemailaddress.fromemailaddress) 哪里更低(email.subject)~'tester';