如何在内部查询中传递外部查询的表
Posted
技术标签:
【中文标题】如何在内部查询中传递外部查询的表【英文标题】:how to pass outer query's table in inner query 【发布时间】:2012-04-18 04:48:51 【问题描述】:这是我的全部查询
SELECT empmst.emp_id, empmst.emp_name,
(SELECT RTRIM
(XMLAGG (XMLELEMENT (e, d || ',')).EXTRACT ('//text()').EXTRACT
('//text()'),
','
)
FROM (SELECT TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1
+ ROWNUM AS d
FROM all_objects
WHERE TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 + ROWNUM <=
TO_DATE ('30-04-2012', 'dd-MM-yyyy')
MINUS
SELECT tsd.ts_date
FROM ts_dtl tsd
WHERE empmst.emp_id = tsd.emp_id
AND tsd.ts_date BETWEEN TO_DATE ('01-04-2012',
'dd-MM-yyyy'
)
AND TO_DATE ('30-04-2012',
'dd-MM-yyyy'
))) AS day11
FROM emp_mst empmst
WHERE TSD.EMP_ID=EMPMST.EMP_ID
ORDER BY empmst.emp_id
我想将外部查询的 EMPMST.EMP_ID 传递给内部查询,但内部查询在 where 子句中没有得到 EMPMST.EMP_ID。 请告诉我如何将外部查询从表传递到内部查询。 内部查询如下
(SELECT RTRIM
(XMLAGG (XMLELEMENT (e, d || ',')).EXTRACT ('//text()').EXTRACT
('//text()'),
','
)
FROM (SELECT TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 + ROWNUM AS d
FROM all_objects
WHERE TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 + ROWNUM <=
TO_DATE ('30-04-2012', 'dd-MM-yyyy')
MINUS
SELECT tsd.ts_date
FROM emp_mst empmst, ts_dtl tsd
WHERE empmst.emp_id = tsd.emp_id
AND ts_date BETWEEN TO_DATE ('01-04-2012', 'dd-MM-yyyy')
AND TO_DATE ('30-04-2012', 'dd-MM-yyyy')))
我想要 emp_name 和 emp_id 和 TS_date,其中 4 月的 TS_DTL 中不存在的 TS_DATE 表示 TS_DTL 表中不存在的 4 月的其余日子
【问题讨论】:
请使用一些数据发布创建表查询,以便我们运行您的查询 【参考方案1】:请在下面找到可以达到相同效果的方法
SELECT EMPMST.EMP_ID,
EMPMST.EMP_NAME,
rtrim(xmlagg(xmlelement(e, b.d1 || ',')).extract('//text()')
.extract('//text()'),
',') as day11
from (SELECT TO_DATE('01-04-2012', 'dd-MM-yyyy') - 1 + rownum AS d1
FROM all_objects
WHERE TO_DATE('01-04-2012', 'dd-MM-yyyy') - 1 + rownum <=
TO_DATE('30-04-2012', 'dd-MM-yyyy')) b,
EMP_MST EMPMST
WHERE EMPMST.EMAIL_ID IS NOT NULL
AND EMPMST.DEPT IN ('Technical')
AND EMPMST.EMP_STATUS_LKP_ID = 201
AND b.d1 NOT IN
(SELECT TSD.TS_DATE as d2
FROM TS_DTL TSD
WHERE TSD.TS_DATE BETWEEN TO_DATE('01-04-2012', 'dd-MM-yyyy') AND
TO_DATE('30-04-2012', 'dd-MM-yyyy')
AND TSD.EMP_ID = EMPMST.EMP_ID)
ORDER BY EMPMST.EMP_ID
【讨论】:
感谢您的回复,但上面的查询给了我所有 b.d1 值,而不是 b.d1 和 c.d2 的区别 非常感谢,我在上面的查询中添加了 EMPMST.EMP_ID 和 EMPMST.EMP_NAME 分组,它运行良好。以上是关于如何在内部查询中传递外部查询的表的主要内容,如果未能解决你的问题,请参考以下文章