2012-11-23 4 views
1

J'ai l'instruction A et l'instruction B.Retour des enregistrements corrects avec TSQL JOIN

L'instruction A renvoie 5 enregistrements et l'instruction B renvoie 1 enregistrement.

Déclaration A

SELECT DISTINCT  
    Outlet.cCode, 
    Employee.cEmployeeNumber, 
    FROM Outlet 
    INNER JOIN Employee ON EmployeeOutlet.iEmployee = Employee.iID 
    WHERE cCOde = 123 

Déclaration B

Select OutletCode, RSMcode, ASMcode, FMcode from Employee_Hierarchy 
Where OutletCode = 123 

maintenant seulement 3 des dossiers de déclaration A doit être retourné avec la Employee.cEmployeeNumber est soit égal à RSMcode, ASMcode ou FMcode ......

Maintenant, si j'ajoute les JOIN j n il va juste retourner 1 enregistrements, comment puis-je répondre aux 2 autres qui sont encore nécessaires?

SELECT DISTINCT  
     Outlet.cCode, 
     Employee.cEmployeeNumber, 
     FROM Outlet 
     INNER JOIN Employee ON EmployeeOutlet.iEmployee = Employee.iID 
     INNER JOIN Employee_Hierarchy as EH ON EH.RSMcode = Employee.cEmployeeNumber and EH.OutletCode = Outlet.cCode 
     WHERE Outlet.cCode = 123 

Quand j'ajoute une jointure pour chaque RSMcode et ASMcode et FMCODE il ne retourne rien .....

+0

salut, est-il possible d'afficher votre schéma de table? De toute façon, vous pouvez essayer la jointure externe gauche au lieu de l'interne. – bonCodigo

Répondre

1

Comment ça?

SELECT DISTINCT  
    Outlet.cCode, 
    Employee.cEmployeeNumber, 
    FROM Outlet 
    INNER JOIN Employee ON EmployeeOutlet.iEmployee = Employee.iID 
    INNER JOIN Employee_Hierarchy as EH ON EH.OutletCode = Outlet.cCode AND (EH.RSMcode = Employee.cEmployeeNumber OR EH.ASMcode = Employee.cEmployeeNumber OR EH.FMcode = Employee.cEmployeeNumber) 
WHERE Outlet.cCode = 123 
+0

Merci beaucoup pour ça !!!! – Etienne

0

juste une supposition

SELECT DISTINCT  
     Outlet.cCode, 
     Employee.cEmployeeNumber, 
     FROM Outlet 
     INNER JOIN Employee ON EmployeeOutlet.iEmployee = Employee.iID 
     INNER JOIN Employee_Hierarchy as EH ON EH.RSMcode = Employee.cEmployeeNumber and EH.OutletCode = Outlet.cCode 
     and EH.OutletCode = 123 
+0

Non, j'ai essayé cela et il ne renvoie aucun enregistrement lorsque je fais cela! – Etienne

0
INNER JOIN Employee_Hierarchy as EH ON EH.RSMcode = Employee.cEmployeeNumber and outletCode = Outlet.cCode 

changer ce morceau de code à

INNER JOIN Employee_Hierarchy as EH ON EH.OutletCode = Outlet.cCode 
WHERE 
Employee.cEmployeeNumber=EH.RSMcode OR 
Employee.cEmployeeNumber=EH.ASMcode OR 
Employee.cEmployeeNumber=EH.FMcode 
Questions connexes