尝试更改SQL语句以使用EXISTS而不是IN

时间:2012-02-20 17:51:13

标签: sql sql-server sql-server-2005 exists

我正在阅读(并且仍在学习)有关SQL中EXISTSIN运算符之间的区别。是否可以更改以下语句,以便使用EXISTS而不是IN?我试过了,但查询需要很长时间才能完成。所以我显然做错了什么。

在下面的示例中,使用EXISTS代替IN会更有效吗?从用于IN语句的当前子查询返回的OperationRecordID记录不会超过10条。

SELECT SPAS.SessionRecordID,
       ( SELECT MIN(TimeValue) AS MinAnaes
           FROM tblTMActualTimes TMAT
          WHERE OperationRecordID IN
                 ( SELECT OperationRecordID
                     FROM tblTMActualOperation TMAO
                    WHERE TMAO.SessionRecordID = SPAS.SessionRecordID
                 )
            AND CFTimeDefinitionID = 'INTOANS'
       ) AS FirstAnaesthetic
  FROM tblSPActualSession SPAS

1 个答案:

答案 0 :(得分:1)

正如评论中所说,它取决于数据更适合这种情况。但是,如果你在存在中做什么,你可以这样做:

SELECT 
    SPAS.SessionRecordID,
    ( 
        SELECT 
            MIN(TimeValue) AS MinAnaes
        FROM tblTMActualTimes TMAT
        WHERE EXISTS
                 ( 
                    SELECT 
                        NULL
                    FROM 
                        tblTMActualOperation TMAO
                    WHERE 
                        TMAO.SessionRecordID = SPAS.SessionRecordID
                        AND TMAT.OperationRecordID=TMAO.OperationRecordID
                 )
            AND CFTimeDefinitionID = 'INTOANS'
       ) AS FirstAnaesthetic
  FROM 
    tblSPActualSession SPAS