问题描述
要在不到几分钟的执行时间内获取所需的数据,我有2个独立的查询:
select
' ' as POHI_ACD,LTRIM(RTRIM(OePo_Header.PO_ID)) as POHI_PONUM,' ' as POHI_POTYP,' ' as POHI_VND,LTRIM(RTRIM(OePo_Header.CLIENT_ID)) as POHI_CO,'B1' as POHI_WA,'n/a' as PODI_COMMNT,-- Comment filled in separate query
' ' as POHI_CUSER,' ' as POHI_TSCRT,' ' as POHI_pgmUP,' ' as POHI_USRUP,'01/01/0001 00:00:00' as POHI_TSLUP,' ' as POHI_FILEPATH
from (
OePo_Header
inner join OePo_Item
on OePo_Header.PO_ID = OePo_Item.PO_ID
)
left join OePo_Remarks
on OePo_Header.WHSE_INST_ID = OePo_Remarks.AUTOKEY
and OePo_Header.PO_ID = OePo_Remarks.PO_ID
where (
(OePo_Item.UNITQTY_ORDER = 1)
and (OePo_Header.SHIPTO_ID like '%*B1')
and(OePo_Item.CLOSED_FLG = 'N')
and(OePo_Item.INVOICED_COUNT = 0)
and(OePo_Item.ITEM_TYPE = '2')
and(OePo_Item.vendOR_ID <> 'WHSE')
)
group by
LTRIM(RTRIM(OePo_Header.PO_ID)),LTRIM(RTRIM(OePo_Header.CLIENT_ID)),'B1',if(TEXT = Null,'',TEXT),OEPO_HEADER.PO_ID
order by
OEPO_HEADER.PO_ID;
和
select
OePo_Remarks.TEXT as POHI_COMMNT
from (
OePo_Remarks
inner join OePo_Header
on OePo_Remarks.AUTOKEY = OePo_Header.WHSE_INST_ID
and OePo_Remarks.PO_ID = OePo_Header.PO_ID
)
where
OePo_Remarks.PO_ID like '%208672%' -- fill in with appropriate PO num from outer code,208672 is just an example. (PO_IDs can be padded,hence the %s)
OePo_Remarks.zflags like '%w%'
与将数据合并到调用两个查询的代码中不同,我将如何设置一个子查询,该子查询使用外部查询中的数据来获取所需的内容?像这样:
select
' ' as POHI_ACD,-- subquery start
( select
OePo_Remarks.TEXT
from (
OePo_Remarks
inner join OePo_Header
on OePo_Remarks.AUTOKEY = OePo_Header.WHSE_INST_ID
and OePo_Remarks.PO_ID = OePo_Header.PO_ID
)
where (
OePo_Remarks.PO_ID like CONCAT('%',POHI_PONUM,'%') -- Here is where I need the correct PONUM from the outer query.
and OePo_Remarks.zflags like '%w%'
)
) as POHI_COMMNT,--subquery end
' ' as POHI_CUSER,if(OePo_Remarks.TEXT = Null,OePo_Remarks.TEXT),OePo_Header.PO_ID
order by
OePo_Header.PO_ID;
使用效率低得多的单个查询,我可以在单个查询中获取所需的数据,但是在此查询中执行需要花费几分钟,并且在查找相似的单独查询中,它可能需要更长的数量级(但不完全相同)数据。有没有办法使此变量起作用? (除非存在join
组合,这样我才能在不到几分钟的时间内收集正确的数据?)
解决方法
您将需要默认装入一组列值以使其匹配,但我会尝试使用并集使两个选择作为单个结果集出现。在我的经验中,找到两个更简单的查询组合成一个联合体比一个复杂的查询要快很多。