主查询未读取子查询结果集

Posted

技术标签:

【中文标题】主查询未读取子查询结果集【英文标题】: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 是什么? 两个表/视图中列的数据类型是什么? 你能分享表格的描述和示例数据吗 【参考方案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】:

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

【讨论】:

以上是关于主查询未读取子查询结果集的主要内容,如果未能解决你的问题,请参考以下文章

Mysql高手系列 - 第12篇:子查询详解

MySQL随记 - 子查询

SQL 数据库 子查询主外键

sql复杂的子查询,横向合并结果集

Sql中in和exists详解

多表查询