如何避免两次调用选择查询只有一个条件的差异

时间:2017-07-24 13:03:52

标签: sql database performance db2 exists

下面提到的查询(外部和内部查询)是相似的,除了一个子句T2.COL2 =(临时/永久)。为适应此子句,select执行两次,导致性能下降。我们可以将内部查询与外部查询合并,避免使用exists,也避免调用select两次。

以下查询只返回一条记录,其中T1.COL2 ='临时'。修改后的查询也应该只返回一个结果。

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')     

提前感谢您的建议。

1 个答案:

答案 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';