2016-11-20 57 views
1

需要帮助来创建SQL查询。有点困惑,所以问问题。这里的情况是:使用OR子句SQL查询

我有一个表说EmpInfo: EmpFirstName, EmpLastName, EmpID, EmpGender, EmpDOB, EmpAddress 表2 EmpMasterID: EmpID1, EmpId2, AbsoluteEmpID

EmpInfo包含样本数据:

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 

EmpMasterID样本数据:

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

现在我必须加入这两个表格得到下列:

EmpID, EmpFirstName, EmpLastName, AbsoluteEmpID

AbsoluteEmpID的值会从EmpMasterID表被拾起如果EmpInfo.EmpID = EmpMasterID.EmpID1 OR EmpInfo.EmpID = EmpMasterID.EmpID2 否则AbsoluteEmpID的值将EMPID本身。

请帮忙。

谢谢。

+0

你的意思是,如果EmpInfo.EmpID = EmpMasterID.EmpID1 OR EmpInfo.EmpID = EmpMasterID.EmpID2? – scaisEdge

+0

正确 - 这是一个错字...感谢您提问 –

+0

如果EmpInfo.EmpID与EmpMasterID.EmpID1在一行上匹配,并且在不同行上匹配EmpMasterID.EmpID2,并且AbsoluteEmpID值在那些行上不同两排? –

回答

0

应根据内部联接

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

为什么你不只是要这个?

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

我看不出什么OR与此查询有关。

1

这将加入EmpID1EmpID2。如果两个失败,left join确保您获得与null一排,然后你只需更换nullempid

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

非常感谢..这工作.. –