Изменить Sql "Не в" на "Left Outer Join" - PullRequest
2 голосов
/ 06 января 2010

Я не хочу использовать "не в" этот SQL-запрос. Как мне это сделать? спасибо

SELECT  
 T2.Sno,
 T2.Name,
 T1.description,
 T2.UserCode            
FROM 
 Table1 AS T1 (nolock)
    INNER JOIN T2 (nolock)
    ON T1.UserCode = T2.UserCode
WHERE
 g.xid= @p_xid
 and T2.Sno not in (select Gid from T3 (nolock))

Ответы [ 2 ]

6 голосов
/ 06 января 2010

Предполагая, что в T2 нет строки, где Sno равен нулю, и в T3, где Gid равен нулю:

SELECT  
 T2.Sno,
 T2.Name,
 T1.description,
 T2.UserCode            
FROM 
 Table1 AS T1 WITH (nolock)
    INNER JOIN T2 WITH (nolock)
      LEFT JOIN T3 WITH (NOLOCK)
      ON T2.Sno = T3.Gid
    ON T1.UserCode = T2.UserCode
WHERE
 g.xid= @p_xid
 and T3.Gid IS NULL
2 голосов
/ 06 января 2010

Если у вас есть несколько строк T3 на T2.Sno = T3.Gid, вам потребуется DISTINCT в JOIN.

  • Без DISTINCT это другой запрос
  • С DISTINCT этодополнительный шаг.

Я бы использовал NOT EXISTS, чтобы избежать этого.

SELECT  
 T2.Sno,
 T2.Name,
 T1.description,
 T2.UserCode            

FROM 
 Table1 AS T1 (nolock)
    INNER JOIN T2 (nolock)
    ON T1.UserCode = T2.UserCode
WHERE
 g.xid= @p_xid
 and not exists (select * from T3 (nolock) where T3.Gid = T2.Sno)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...