2017-07-24 54 views
0

以下提到的查詢(外部和內部查詢)除了一個子句T2.COL2 =(臨時/永久)之外是相似的。爲了適應這個子句,select被執行兩次,導致性能下降。我們可以將內部查詢與外部查詢合併,避免使用存在,並避免調用select兩次。如何避免僅在一個條件下兩次調用select查詢差異

以下查詢僅返回一個記錄,其中T1.COL2 ='Temporary'。修改的查詢也應該只返回一個結果。

 
SELECT * FROM TABLE1 T1 WHERE T1.COL1='Rajesh' AND T1.COL2='Temporary' 
AND EXISTS (           
    SELECT 'Y'            
     FROM TABLE1 T2 WHERE T2.COL1='Rajesh' AND T2.COL2='Permanant')  

在此先感謝您的建議。

+0

編輯你的問題,並提供樣本數據,預期的效果,並解釋你正在嘗試做的。 –

回答

0

您可以使用窗口函數:

SELECT T1.* 
FROM (SELECT T1.*, MIN(COL2) OVER (PARTITION BY T1.COL1) as MIN_COL2 
     FROM TABLE1 T1 
     WHERE T1.COL1 = 'Rajesh' AND T1.COL2 IN ('Permanent', 'Temporary') 
    ) T1 
WHERE MIN_COL2 = 'Permanent' AND T1.COL2 = 'Temporary'; 
+0

這將在DB2數據庫中工作嗎? – user6804978

+0

@ user6804978。 。 。這應該。 –

相關問題