繁体   English   中英

如何在Postgres中使用CTE重写此查询

[英]How do I rewrite this query using CTE in postgres

我的查询如下

UPDATE tname 
SET cname1 = TRIM(TRAILING 'xxx' from l_name), 
    cname2 = f_name, 
    cname3 = TRIM(TRAILING 'xxx' from l_name)  
where tname.last_name ilike '%xxxyyy%' and cid in (zzzz);

如何在Postgres中使用CTE重写此代码? 这样我就不会在查询中重复使用修整功能两次?

尝试如下

with cte as
(
  select TRIM(TRAILING 'xxx' from l_name) as n1,
f_name
from tname where tname.last_name like '%xxxyyy%' and cid in (zzzz)
) update tname 
 set cname1=n1,
cname2=cte.f_name,
cname3=n1 
from cte       
  where t1.f_name=cte.f_name

我不会担心。 但是,如果您有主键,则可以使用:

UPDATE tname 
    SET cname1 = tt.trimmed_l_name, 
        cname2 = tname.f_name, 
        cname3 = tt.trimmed_l_name 
FROM (SELECT tn.*, TRIM(TRAILING 'xxx' FROM l_name) as trimmed_l_name
      FROM tname tn 
     ) tt
     ON tname.pk = tn.pk
WHERE tname.last_name ilike '%xxxyyy%' and tname.cid in (zzzz);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM