Changez Sql "Not In" à "Left Outer Join"

Je ne veux pas utiliser "pas dans" cette requête sql. Comment puis-je le faire? Merci

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

Si vous avez plusieurs lignes T3 par T2.Sno = T3.Gid , vous aurez besoin de DISTINCT dans un JOIN.

  • Sans DISTINCT, c'est une requête différente
  • Avec DISTINCT, c'est une étape supplémentaire.

J'utiliserais NOT EXISTS qui évite cela.

 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) 

En supposant qu'il n'y a pas de ligne dans T2 où Sno est nul et dans T3 où Gid est nul:

 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