下面提到的查询(外部和内部查询)是相似的,除了一个子句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')
提前感谢您的建议。
答案 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';