with as 和update ,Delete,insert

本文介绍了一种使用pgSQL中的WITH子句进行复杂更新和删除操作的方法。通过创建临时视图,可以有效地更新主表中的数据,并实现条件删除。此外,还展示了如何结合使用WITH子句和INSERT进行数据插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个SQL写了很久的时间,感觉pgSQL的很是麻烦。

with as 先命名一个表出来,就可以当成临时表用。

WITH tmp AS (
    SELECT
        MAX(mgi.inner_cd) AS innerCd,
        mgi.ginner_code AS ginner_code,
        mgi.subsidiary_code AS subsidiary_code
    FROM
        prod.m_ginner_inner11 mgi,
        TEMP .hscode_renkei_manage aa
    WHERE
        mgi.subsidiary_code = aa.subsidiary_cd
    AND aa.ginner_code = mgi.GINNER_CODE
    GROUP BY
        mgi.subsidiary_code,
        mgi.ginner_code
)
 UPDATE TEMP.hscode_renkei_manage htm
SET inner_cd =  tmp.innerCd
FROM
tmp
WHERE
    htm.ginner_code  =  tmp.ginner_code
AND htm.subsidiary_cd = tmp.subsidiary_code

主要是要注意命名,稍不注意,就报错。

在使用using和删除一起用。

 WITH price_inner AS
    (
        SELECT
            MP.AA,
            MP.BB,
            MP.CC
        FROM
            ${temp}.ss MP,                                                
            ${temp}.qqq MKI                                           
        WHERE
            MP.a = #{p1,jdbcType=VARCHAR}
        AND MP.b = #{p2,jdbcType=VARCHAR} 
        AND MP.c = #{p3,jdbcType=VARCHAR} 
       
      )
      DELETE FROM
             ${temp}.${tableName} MUP
      USING  price_inner
      WHERE
           MUP.a = price_inner.AA
       AND MUP.b = price_inner.BB
       AND MUP.c = price_inner.CC

 和insert一起用。

    WITH tmp_product AS (
    SELECT DISTINCT
    aa,
    bb,

    FROM
         hrm
        
    WHERE
        hrm.a = ? AND
        hrm.b = ?    
    ) INSERT INTO ${temp}.m_product (
        aa,
        bb
    ) SELECT
        tmp_product.aa,
        tmp_product.bb
    FROM
        tmp_product

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值