Sql 如何避免仅在一个条件下调用两次select查询以获得差异

Sql 如何避免仅在一个条件下调用两次select查询以获得差异,sql,database,performance,db2,exists,Sql,Database,Performance,Db2,Exists,下面提到的查询外部查询和内部查询类似,除了一个子句T2.COL2=临时/永久。为适应此子句,select执行两次,导致性能下降。我们可以合并内部查询和外部查询,避免使用exists,也避免调用select两次 下面的查询只返回一条记录,其中T1.COL2='Temporary'。修改后的查询也应该只返回一个结果 SELECT * FROM TABLE1 T1 WHERE T1.COL1='Rajesh' AND T1.COL2='Temporary' AND EXISTS (

下面提到的查询外部查询和内部查询类似,除了一个子句T2.COL2=临时/永久。为适应此子句,select执行两次,导致性能下降。我们可以合并内部查询和外部查询,避免使用exists,也避免调用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')
提前感谢您的建议

您可以使用窗口功能:

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

编辑您的问题,提供示例数据、所需结果,并解释您试图执行的操作。@user6804978。应该这样。