You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2 SQL查询需求:找出AMOUNT列值重复且对应CASH_CO列值不同的数据对

修正你的DB2 SQL查询:找出重复AMOUNT且对应CASH_CO不同的记录

嘿,我瞅了瞅你写的查询语句,这明显踩了好几个坑——难怪查不到结果呢!咱们一步步拆解问题,再给你俩靠谱的解决方案:

先说说原查询的核心问题

  • 表名拼写不一致:你给S1关联的是HI_MTI_O1(字母O),S2却是HI_MTI_01(数字0),这俩是完全不同的表,根本关联不上符合条件的数据!
  • JOIN逻辑完全跑偏:你要找的是同一ACCOUNT_ID下,AMOUNT重复但CASH_CO不同的记录,但原查询里写的S1.AMOUNT = S2.CASH_CO是把金额和另一条记录的CASH_CO关联,完全不符合需求。
  • WHERE条件自相矛盾:S1.CASH_CO <> S1.CASH_CO是个永远不成立的条件(自己不可能不等于自己),直接把所有结果都过滤掉了,后面的条件再对也没用。

方案1:自关联查询(直观易懂)

先把表名统一,然后用自关联找到同一账户、相同AMOUNT但CASH_CO不同的记录,同时排除同一条记录自我关联的情况:

SELECT DISTINCT S1.AMOUNT, S1.CASH_CO, S1.ACCOUNT_ID
FROM HI_MTI_O1 S1
INNER JOIN HI_MTI_O1 S2 
    ON S1.ACCOUNT_ID = S2.ACCOUNT_ID 
    AND S1.AMOUNT = S2.AMOUNT 
    AND S1.CASH_CO <> S2.CASH_CO
    AND S1.ROWID <> S2.ROWID -- 用ROWID避免同一条记录自我关联,也可以换成表的主键列(比如ID)
FETCH FIRST 100 ROWS ONLY;

加DISTINCT是为了避免返回重复的记录对(比如S1和S2互换的情况)。

方案2:窗口函数(性能更优)

如果数据量较大,用窗口函数只扫描一次表就能搞定,效率更高:

WITH duplicate_amounts AS (
    SELECT 
        AMOUNT, 
        CASH_CO, 
        ACCOUNT_ID,
        -- 按账户+金额分组,统计该组内不同CASH_CO的数量
        COUNT(DISTINCT CASH_CO) OVER (PARTITION BY ACCOUNT_ID, AMOUNT) AS cash_co_count
    FROM HI_MTI_O1
)
SELECT AMOUNT, CASH_CO, ACCOUNT_ID
FROM duplicate_amounts
-- 数量大于1说明该金额下有不同的CASH_CO
WHERE cash_co_count > 1
FETCH FIRST 100 ROWS ONLY;

小提示

  • 务必确认表名是HI_MTI_O1还是HI_MTI_01,别再把字母O和数字0搞混啦!
  • 如果你的表有主键(比如TRANSACTION_ID),用主键代替ROWID会更可靠,毕竟有些场景下ROWID可能有特殊限制。

内容的提问来源于stack exchange,提问作者Tommeck37

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:12:47