當我嘗試使用子查詢設定變數的值時遇到問題。
這是我的 SQL 代碼:
SELECT @V_SOURCE = (SELECT ITEM_SOURCE
FROM TABLE1
WHERE OPP_CODE = @V_OPP_CODE
AND PDGROUPNO = @V_PRD_GROUP_NO
AND DELETE_FLAG IS NULL
AND CONTRACTOR = @V_CONTRACTOR
AND OPP_ITEM_NO = @_OPP_ITEM_NO)
當我使用在 WHERE 條件中使用的假定變數運行此代碼時,它僅回傳正確的 1 行和 1 列,但如果我使用存盤程序運行此代碼,它將回傳錯誤:
子查詢回傳超過 1 個值。當子查詢跟隨 =、!=、<、<=、>、>= 或子查詢用作運算式時,這是不允許的
uj5u.com熱心網友回復:
子查詢可以回傳多行。
即使不應該,那也行不通。
但是你可以把它改成這個。
SELECT @V_SOURCE = ITEM_SOURCE
FROM TABLE1
WHERE OPP_CODE = @V_OPP_CODE
AND PDGROUPNO = @V_PRD_GROUP_NO
AND DELETE_FLAG IS NULL
AND CONTRACTOR = @V_CONTRACTOR
AND OPP_ITEM_NO = @_OPP_ITEM_NO
GROUP BY ITEM_SOURCE;
它將結果集的最后一個值分配給變數。
這很好,因為無論如何你只期望一個。
另一種方法是只選擇前 1 個
SET @V_SOURCE = (
SELECT TOP 1 ITEM_SOURCE
FROM TABLE1
WHERE OPP_CODE = @V_OPP_CODE
AND PDGROUPNO = @V_PRD_GROUP_NO
AND DELETE_FLAG IS NULL
AND CONTRACTOR = @V_CONTRACTOR
AND OPP_ITEM_NO = @_OPP_ITEM_NO
);
uj5u.com熱心網友回復:
我在查詢中發現了一個問題,因為我查詢了要用于此查詢的資料,一些 CONTRACTOR 為 NULL,然后在使用此查詢時出錯
SELECT @V_SOURCE = (SELECT ITEM_SOURCE
FROM TABLE1
WHERE OPP_CODE = @V_OPP_CODE
AND PDGROUPNO = @V_PRD_GROUP_NO
AND DELETE_FLAG IS NULL
AND CONTRACTOR = @V_CONTRACTOR
AND OPP_ITEM_NO = @_OPP_ITEM_NO)
當我過濾掉 CONTRACTOR 為 NULL 的資料時,我現在沒有收到任何錯誤。
謝謝大家。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436634.html
上一篇:具有重復日期的潛在客戶功能?
