我不明白为什么下面的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
子句都会将其转换为内部连接。