2017-07-24 48 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。 。 。这应该。 –

相关问题