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