2016-11-20 2 views
1

Нужна помощь в создании SQL-запроса. Немного смущенный, поэтому задающий вопрос. Вот ситуация:SQL Присоединиться к запросу с предложением OR

У меня есть одна таблица говорят EmpInfo: EmpFirstName, EmpLastName, EmpID, EmpGender, EmpDOB, EmpAddress Table2 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 ИЛИ 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

Это присоединится либо к EmpID1, либо по адресу EmpID2. Если оба не удается, 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 
+0

Спасибо большое .. Это сработало .. –