使用OR子句进行SQL连接查询

时间:2016-11-20 17:07:52

标签: sql sql-server jointable

在创建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

如果EmpInfo.EmpID = EmpMasterID.EmpID1 OR EmpInfo.EmpID = EmpMasterID.EmpID2,将从EmpMasterID表中获取AbsoluteEmpID的值 否则,AbsoluteEmpID的值将是EmpID本身。

请帮忙。

感谢。

3 个答案:

答案 0 :(得分:1)

这将加入EmpID1EmpID2。如果两者都失败,left join会确保您获得null行,然后您只需将null替换为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

答案 1 :(得分:0)

应该基于内部联接

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

答案 2 :(得分:0)

为什么你不想要这个?

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

我不知道OR与此查询有什么关系。