我不明白为什么下面的SELECT找到7065条记录,但是更新说它更新了13935条记录,这是表中的每条记录。
有人能提出原因吗?

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子句中不包括正在更新的表。
所以,我想你想:

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

您的版本正在更新fromemailaddress中的所有行,因为在fromemailaddress子句中没有连接update的条件,在fea子句中也没有连接from的条件。
另请注意:left join是不必要的,因为无论如何,where子句都会将其转换为内部连接。

10-06 09:37