sql - 多个子查询的内部连接?
问题描述
我正在编写一个包含几个子查询的选择(下面的代码片段中只有一个),但是我很难只返回 AIRFI_TCD 子查询中有 1 个现有行的行。我只想在 TSUMM 和 TPPPRFL 表上存在匹配的 CLT_ID 时显示行。我尝试了 HAVING COUNT 子句(见下文),但没有奏效。我正在讨论如何将 TSUMM 与我的子查询结合起来。
SELECT RIGHT(DIGITS (A.CLT_ID),9) || A.PGM_ID ||
RIGHT(DIGITS (A.PGM_ACCT_SQNBR),4) AS BN
, ( SELECT B.XREF_NBR
FROM GHMTUO#1.TPPPRFL B
WHERE B.PARTIC_PRFL_TCD = '04' --AIRFI
AND B.CLT_ID = A.CLT_ID
AND B.BUS_PGM_ID = A.PGM_ID
AND B.CLT_ID_TCD = '01'
AND B.PARTIC_PRFL_EDT = (SELECT MAX(X.PARTIC_PRFL_EDT)
FROM GHMTUO#1.TPPPRFL X
WHERE X.CLT_ID = B.CLT_ID)
AND B.PARTIC_PRFL_CDTTM = (SELECT MAX(Z.PARTIC_PRFL_CDTTM)
FROM GHMTUO#1.TPPPRFL Z
WHERE Z.CLT_ID = B.CLT_ID)
) AS AIRFI_TCD
FROM RAMTUO#1.TSUMM A
WHERE A.PGM_ID = 'RT'
GROUP BY A.CLT_ID, A.PGM_ID, A.PGM_ACCT_SQNBR
HAVING COUNT(AIRFI_TCD) > 1
WITH UR;
谢谢!
解决方案
如果你只需要存在,那么试试这个:
SELECT RIGHT(DIGITS (A.CLT_ID),9) || A.PGM_ID ||
RIGHT(DIGITS (A.PGM_ACCT_SQNBR),4) AS BN
FROM RAMTUO#1.TSUMM A
WHERE A.PGM_ID = 'RT'
AND EXISTS
(
SELECT 1
FROM GHMTUO#1.TPPPRFL B
JOIN
(
SELECT CL
T_ID
, MAX(PARTIC_PRFL_EDT) PARTIC_PRFL_EDT
, MAX(PARTIC_PRFL_CDTTM) PARTIC_PRFL_CDTTM
FROM GHMTUO#1.TPPPRFL
GROUP BY CLT_ID
) X ON X.CLT_ID = B.CLT_ID
AND X.PARTIC_PRFL_EDT = B.PARTIC_PRFL_EDT
AND X.PARTIC_PRFL_CDTTM = B.PARTIC_PRFL_CDTTM
WHERE B.PARTIC_PRFL_TCD = '04' --AIRFI
AND B.CLT_ID = A.CLT_ID
AND B.BUS_PGM_ID = A.PGM_ID
AND B.CLT_ID_TCD = '01'
)
;
推荐阅读
- c++ - 如何在迭代文件的同时从文件中读取指定数量的字符?
- python - 如何从文件中读取所有行并仅打印每行的最后一个单词?
- python - Django - 复杂的 ORM 查询(related_set)
- python - 如何将具有单个 id 的多行提取为 csv 文件,其中包含属于该特定 id 的所有属性?
- javascript - 选择对象数组中的特定字段返回未定义但记录整个返回的整个数组会给出好的值
- abap - 解析 ABAP 动态调用的方法:考虑的类型顺序
- node.js - 前后端同时使用时报错
- reactjs - React 生命周期与窗口事件竞争条件
- r - 在 R 中使用具有不寻常日期格式的 lubridate
- java - 我无法触发约束布局