Попытка изменить инструкцию SQL, чтобы использовать EXISTS вместо IN - PullRequest
0 голосов
/ 20 февраля 2012

Я читал (и все еще изучаю) разницу между операторами EXISTS и IN в SQL. Можно ли изменить следующий оператор, чтобы он использовал EXISTS вместо IN? Я пытался, но запрос занимает очень много времени. Так что я явно что-то делаю не так.

В приведенном ниже примере было бы более эффективно использовать EXISTS вместо IN? В текущем подзапросе будет использоваться не более 10 записей OperationRecordID, используемых для оператора IN.

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 Ответ

1 голос
/ 20 февраля 2012

Как сказано в комментариях, зависит от данных, что больше подходит для ситуации. Но если вы что-то делаете в существующем, вы можете сделать это примерно так:

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
...