如何在内部查询中传递外部查询的表

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 分组,它运行良好。

以上是关于如何在内部查询中传递外部查询的表的主要内容,如果未能解决你的问题,请参考以下文章

数据库如何在内部工作? [关闭]

如何通过以下查询使用按功能分组?

如何在分层查询内的相关子查询中传递外部表值

jQuery - 如何使用元素的 HTML 获取所有样式/css(在内部/外部文档中定义)

SQL DB2 如何将日期变量应用于内部查询?

如何在内部连接表上强制索引?