Postgres SQL SELECT和UPDATE表现不同

时间:2015-08-12 11:40:03

标签: sql postgresql join sql-update

我无法理解为什么下面的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

2 个答案:

答案 0 :(得分:3)

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

所以,我想你想要:

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

您的版本正在更新fromemailaddress中的所有行,因为fromemailaddress子句中的updatefea子句中的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';