2016-11-20 1 views
1

Besoin d'aide pour créer une requête SQL. Peu confus donc posant la question. Voici la situation:Requête SQL Join avec la clause OR

J'ai une table dire EmpInfo: EmpFirstName, EmpLastName, EmpID, EmpGender, EmpDOB, EmpAddress Tableau2 EmpMasterID: EmpID1, EmpId2, AbsoluteEmpID

EmpInfo contient des données échantillon:

EmpFirstName | EmpLastName | EmpID | EmpGender | EmpDOB | EmpAddress 
First1  | Last1  | 10 | M  | 1/1/92 | Addr1 
First2  | Last2  | 20 | F  | 1/12/92 | Addr2 
First3  | Last3  | 30 | F  | 1/12/94 | Addr3 
First4  | Last4  | 40 | M  | 1/2/94 | Addr4 
First5  | Last5  | 60 | M  | 1/1/91 | Addr5 
First6  | Last6  | 70 | F  | 1/12/92 | Addr6 
First7  | Last7  | 80 | F  | 1/12/95 | Addr7 
First8  | Last8  | 90 | M  | 1/2/97 | Addr8 

données EmpMasterID exemple:

EmpID1 | EmpId2 | AbsoluteEmpID 
10  | 20 | 10 
60  | 70 | 60 

Maintenant, je dois rejoindre ces 2 tables et obtenir les colonnes suivantes:

EmpID, EmpFirstName, EmpLastName, AbsoluteEmpID

La valeur de AbsoluteEmpID sera repris de la table EmpMasterID si EmpInfo.EmpID = EmpMasterID.EmpID1 OR EmpInfo.EmpID = EmpMasterID.EmpID2 Sinon, la valeur de AbsoluteEmpID sera EMPID lui-même.

Aidez-nous s'il vous plaît.

Merci.

+0

si tu veux dire EmpInfo.EmpID = EmpMasterID.EmpID1 OU EmpInfo.EmpID = EmpMasterID.EmpID2? – scaisEdge

+0

Correct-- c'était une faute de frappe ... Merci de demander –

+0

Que voulez-vous obtenir si EmpInfo.EmpID correspond EmpMasterID.EmpID1 sur une ligne et correspond EmpMasterID.EmpID2 sur une ligne différente, et les valeurs AbsoluteEmpID sont différentes sur ceux deux rangs? –

Répondre

0

doit être fondée sur une jointure interne

update EmpInfo 
INNER JOIN EmpMasterID On (EmpInfo.EmpID = EmpMasterID.EmpID1 
          OR EmpInfo.EmpID = EmpMasterID.EmpID2) 
SET EmpID = AbsoluteEmpID 
0

Pourquoi ne vous voulez pas seulement cela?

SELECT ei.EmpID, ei.EmpFirstName, ei.EmpLastName, em.AbsoluteEmpID 
FROM EmpMasterID em JOIN 
    EmpInfo ei 
    ON ei.EmpID = ei.AbsoluteEmpID; 

Je ne vois pas ce que OR a à voir avec cette requête.

1

Ceci rejoindra soit le EmpID1 soit le EmpID2. Si les deux échoue, left join vous assure une ligne avec null puis vous venez de remplacer null avec empid:

select ei.EmpID, 
     ei.EmpFirstName, 
     ei.EmpLastName, 
     isnull(em.AbsoluteEmpID, ei.EmpID) as AbsoluteEmpID 
from EmpInfo ei 
left join EmpMasterID em on ei.empid = em.EmpID1 or ei.empid = em.EmpID2 
+0

Merci beaucoup .. Cela a fonctionné .. –