【问题标题】:Sub-query result set not read by main query主查询未读取子查询结果集
【发布时间】:2018-07-05 11:06:56
【问题描述】:

我写了一个这样的查询:

select *
from DATASYNCH_HA_TO_TRG_AUDIT_HIST
where PSX_BATCH_ID IN (select PSX_BATCH_ID
                       from DATASYNCH_HA_TO_TRG_AUDIT_T
                      );

在这里,当我单独执行子查询时,它会产生一些值,当我将这些值放在子查询的位置时,主查询也会返回一些值。但是,当我使用整个查询时,它会没有产生任何值。这怎么可能?

【问题讨论】:

  • 您确定表 DATASYNCH_HA_TO_TRG_AUDIT_HIST 的列 PSX_BATCH_ID 与 DATASYNCH_HA_TO_TRG_AUDIT_T 表的 PSX_BATCH_ID id 相同。
  • 需要样本输入输出和预期输出
  • 这两个表,还是其中一个或两个是视图?您查询的execution plan 是什么?
  • 两个表/视图中列的数据类型是什么?
  • 你能分享表格的描述和示例数据吗

标签: sql oracle subquery


【解决方案1】:

希望 PSX_BATCH_ID 列数据类型是整数。如果是 varchar 字段,则修剪该值。

选择 * FROM DATASYNCH_HA_TO_TRG_AUDIT_HIST 在哪里修剪(PSX_BATCH_ID) (从 DATASYNCH_HA_TO_TRG_AUDIT_T 中选择 TRIM(PSX_BATCH_ID));

不要使用 IN 查询,而是使用 JOIN

选择 * FROM DATASYNCH_HA_TO_TRG_AUDIT_HIST A INNER JOIN DATASYNCH_HA_TO_TRG_AUDIT_T B 开启(A.PSX_BATCH_ID = B.PSX_BATCH_ID)

【讨论】:

    【解决方案2】:

    真的很抱歉,我发现这实际上是一个数据库问题。我最近在一个程序中运行了查询,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多