首页 > 解决方案 > 在 postgresql 中运行更新查询时出错

问题描述

我是 PostgreSQL 新手。在更新查询下方运行时,我遇到了错误。

update useremails ue 
SET ue.useinstitutionid=id.InstitutionID from instdomains id 
where ue.email REGEXP CONCAT('^.*[.@]',id.DomainMask,'$');

错误:“REGEXP”处或附近的语法错误

mysql查询

UPDATE useremails
JOIN instdomains ON useremails.email 
REGEXP CONCAT('^.*[.@]',instdomains.DomainMask,'$')
SET useremails.useinstitutionid=instdomains.InstitutionID;

我将此查询从 mysql 转换为 Postgresql。如何在 postgresql 中重写此查询?

标签: sqlpostgresqlsql-update

解决方案


Postgres 中的正则表达式运算符是~, not REGEXP(由 MySQL 和 SQLite 使用)。试试这个版本:

UPDATE useremails ue
SET useinstitutionid = id.InstitutionID
FROM instdomains id
WHERE ue.email ~* ('^.*[.@]' || id.DomainMask);  -- case insensitive, for a case
                                                 -- sensitive match just use ~

请注意,您几乎可以使用常规LIKE运算符轻松表达上述更新:

UPDATE useremails ue
SET useinstitutionid = id.InstitutionID
FROM instdomains id
WHERE ue.email LIKE '%.' || id.DomainMask || '%' OR
      ue.email LIKE '%@' || id.DomainMask || '%';

推荐阅读