Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres SQL选择和更新行为不同_Sql_Postgresql_Join_Sql Update - Fatal编程技术网

Postgres SQL选择和更新行为不同

Postgres SQL选择和更新行为不同,sql,postgresql,join,sql-update,Sql,Postgresql,Join,Sql Update,我不明白为什么下面的选择会找到7065条记录,但更新说它会更新13935条记录,这是表中的每条记录 有人能提出原因吗 superfrr=# select count(*) from fromemailaddress LEFT JOIN email ON (email.fromemailaddress = fromemailaddress.fromemailaddress) WHERE LOWER(email.subject) ~ 'tester'; count ------- 706

我不明白为什么下面的选择会找到7065条记录,但更新说它会更新13935条记录,这是表中的每条记录

有人能提出原因吗

superfrr=# select count(*)  from fromemailaddress LEFT JOIN email ON 
(email.fromemailaddress = fromemailaddress.fromemailaddress) 
WHERE LOWER(email.subject) ~ 'tester';
 count
-------
  7065
但是:


使用
~
表示您正在使用Postgres。如果是这样,这两个查询所做的事情就大不相同了。在Postgres中,不在
from
子句中包含正在更新的表

所以,我想你想要:

update fromemailaddress
    set call = true 
    from email
    where email.fromemailaddress = fromemailaddress.fromemailaddress and
          LOWER(email.subject) ~ 'tester';
您的版本正在更新
fromemailaddress
中的所有行,因为在
update
子句和
from
子句中没有连接
fromemailaddress
的条件


另请注意:
左连接
是不必要的,因为
where
子句将其转换为内部连接。

使用
~
表示您正在使用Postgres。如果是这样,这两个查询所做的事情就大不相同了。在Postgres中,不在
from
子句中包含正在更新的表

所以,我想你想要:

update fromemailaddress
    set call = true 
    from email
    where email.fromemailaddress = fromemailaddress.fromemailaddress and
          LOWER(email.subject) ~ 'tester';
您的版本正在更新
fromemailaddress
中的所有行,因为在
update
子句和
from
子句中没有连接
fromemailaddress
的条件


另请注意:
左连接
是不必要的,因为
where
子句无论如何都会将其转换为一个内部连接。

您必须对主键进行计数,它将返回所有值,因为count对空值不起作用。希望这有帮助,谢谢

select count(PrimaryKey Field)  from fromemailaddress LEFT JOIN email ON 
(email.fromemailaddress=fromemailaddress.fromemailaddress)
其中较低的(email.subject)~'tester'

您必须在主键上计数,它将返回所有值,因为计数不适用于空值。希望这有帮助,谢谢

select count(PrimaryKey Field)  from fromemailaddress LEFT JOIN email ON 
(email.fromemailaddress=fromemailaddress.fromemailaddress)
其中较低的(email.subject)~'tester'

也许
count
不包括空值?@EMett
count(*)
包括所有内容,
null
值包括在内,如果一行完全包含
null
值()请使用您正在使用的数据库标记您的问题。请尝试使用
更新FEA
而不是
从EmailAddress更新
-更新了多少行?:)如果要对第二个表应用条件,为什么要使用左联接?直接使用内部联接不是更简单吗?除此之外,我从未在更新语句中使用连接(但我更习惯于Oracle,并使用EXISTS/in子句处理这些情况)也许
count
不包含空值?@EMett
count(*)
包含所有内容,
null
包含值,并且如果一行包含
null
全部值()请使用您正在使用的数据库标记您的问题。请尝试使用
更新FEA
而不是
从EmailAddress更新
-更新了多少行?:)如果要对第二个表应用条件,为什么要使用左联接?直接使用内部联接不是更简单吗?除此之外,我从未在更新语句中使用连接(但我更习惯于Oracle,并使用EXISTS/in子句处理这些情况),还值得注意的是,该运算符的功能是区分大小写的正则表达式匹配。还值得注意的是,该运算符的功能是区分大小写的正则表达式匹配。