【问题标题】:how to update the column data based on the given select statement?如何根据给定的 select 语句更新列数据?
【发布时间】:2017-01-21 02:15:36
【问题描述】:
UPDATE SQ_DEAL_PARTNER SET PRIMARY_FL =PRIMARYFL WHERE  DPID =
    (SELECT DPID, MIN(CASE WHEN DPID IN (SELECT MIN(DPID) 
     FROM SQ_DEAL_PARTNER  WHERE DID=17664 )THEN  'Y' ELSE 'N' END)PRIMARYFL 
    FROM sq_deal_partner dl 
    WHERE DID=17664
     AND PARTNER_TY = 'D'
    GROUP BY DPID);

我如何在该声明之上进行更新,请对此提供帮助。

这是我的查询,我想要这样的输出

dpid    primary_fl
123      y
124      n
125      n

【问题讨论】:

  • 发帖时,一般需要展示四样东西。你发了两个,请添加另外两个。它们是: (1) 一个或多个基表的描述(表名、列名和数据类型,仅适用于解决问题所涉及的列),以及一些示例数据。 (2) 清晰的需求陈述——要使用的逻辑。 (3) 输出的外观。 (4) 你所尝试的。现在:您发布了 (3) 和 (4),我们仍然需要 (1) 和 (2)。
  • @mathguy 我需要根据 min(dpid) 更新 primary_fl。如果假设 min(dpid) then primary_fl='Y' elseprimary_fl='N'

标签: oracle plsql


【解决方案1】:

我推荐使用半合并语句:

MERGE INTO SQ_DEAL_PARTNER dest
USING (SELECT DPID, 
              MIN(CASE 
                   WHEN DPID IN (SELECT MIN(DPID) 
                                   FROM SQ_DEAL_PARTNER  
                                  WHERE DID=17664 )
                   THEN 'Y' 
                   ELSE 'N' 
                  END) PRIMARYFL 
         FROM sq_deal_partner dl 
        WHERE DID=17664
          AND PARTNER_TY = 'D'
        GROUP BY DPID) src
ON (src.DPID = dest.DPID)
WHEN MATCHED THEN 
UPDATE SET
dest.PRIMARY_FL = src.PRIMARYFL;

【讨论】:

  • 有什么可能的方法吗。请提供给我。谢谢
  • 感谢快速重播。但是有没有最简单的方法?
  • 我会尝试,但对不起我的工程师 :) 将 dest 和 src 视为两个不同的表。 Dest 是您的目标,您需要在源(src)表中找到以 ON 条件写入的匹配行。只是您需要做的是准备 src SELECT 以更新正确的行。看这里:dba-oracle.com/oracle_tips_rittman_merge.htm MERGE 是非常有用的工具,而且很容易理解;)
  • 是否可以在包中使用?或者在执行时会出现任何问题?谢谢
  • 舒尔,MERGE 是 Oracle 中的标准 SQL 指令,如插入或更新。你可以在包/函数/过程中使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多