簡體   English   中英

帶有變量的普適 SQL 子查詢

[英]Pervasive SQL subquery with variable

為了在不到幾分鍾的執行時間內獲得我需要的數據,我有 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,
    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,
    -- 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,
    ' ' 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(OePo_Remarks.TEXT = Null, '', OePo_Remarks.TEXT),
    '',
    '',
    OePo_Header.PO_ID
order by
    OePo_Header.PO_ID;

使用一個效率低得多的查詢,我可以在單個查詢中獲取我需要的數據,但在此查詢中執行需要幾分鍾的時間,並且在尋找相似(但不相同)的單獨查詢中可能需要更長的時間) 數據。 有沒有辦法讓這個工作與變量? (除非有一個join組合可以讓我在不到幾分鍾的時間內收集正確的數據?)

您需要默認加載列值以使它們匹配,但我會嘗試使用聯合來使您的兩個選擇作為單個結果集出現。 根據我的經驗,找到兩個更簡單的查詢組合在一起比一個復雜的查詢更快的情況並不少見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM