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
子句中的 fromemailaddress
和 from
子句中的 fea
.
另请注意:left join
是不必要的,因为 where
子句无论如何都会将其变成内部联接。
您必须依靠主键,它将 returns 所有值,因为计数不适用于空值。希望这有帮助谢谢
select count(PrimaryKey Field) from fromemailaddress LEFT JOIN email ON
(email.fromemailaddress = fromemailaddress.fromemailaddress)
哪里更低(email.subject)~'tester';
我不明白为什么下面的 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
子句中的 fromemailaddress
和 from
子句中的 fea
.
另请注意:left join
是不必要的,因为 where
子句无论如何都会将其变成内部联接。
您必须依靠主键,它将 returns 所有值,因为计数不适用于空值。希望这有帮助谢谢
select count(PrimaryKey Field) from fromemailaddress LEFT JOIN email ON
(email.fromemailaddress = fromemailaddress.fromemailaddress) 哪里更低(email.subject)~'tester';