我无法理解为什么下面的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
答案 0 :(得分:3)
使用~
表明您使用的是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
没有条件。< / p>
另请注意:left join
是不必要的,因为where
子句无论如何都会将其转换为内连接。
答案 1 :(得分:1)
您必须指望它将返回所有值的主键,因为count不对空值起作用。希望这有助于谢谢
select count(PrimaryKey Field) from fromemailaddress LEFT JOIN email ON
(email.fromemailaddress = fromemailaddress.fromemailaddress) WHERE LOWER(email.subject)〜'tester';