2009-08-10 3 views
1

У меня возникла проблема с вопросом о соединении SQL.SQL join related question

У меня есть таблица EMPLOYEE с EmpID, FirstName, LastName, Email, Phone

У меня есть еще один стол OTHERNAME с 2 полями "Name" & "OtherName".

Эта таблица содержит значения поиска, такие как "James", "Jim"; "Thomas", "Tom"; "Steven", "Steve".

Я хочу написать запрос, который будет возвращать строки

EmpID, FirstName, LastName, Email, Phone, OtherName 
where Employee.Firstname = OTHERName.Name 
+0

Вы называете всех своими альтернативными именами. А как насчет Ричарда? Если альтернативное имя действительно привязано к фактическому идентификатору сотрудника вместо имени. – pjp

+0

Нет, потому что OTHERNAME имеет только данные типа «lookup». Это означает, что у OTHERNAME будет только одна запись для ROBERT, BOB; или одна запись для THOMAS, TOM; , несмотря на то, что в компании 12 членов. – Frank

ответ

7
Select e.EmpID, e.FirstName, e.LastName, e.Email, e.Phone, o.OtherName 
From Employee e 
Left Outer Join OtherName o on e.FirstName = o.Name 

Из ваших комментариев это звучит, как вы на самом деле хотите, внешнее соединение.

(From Comments) Внешнее объединение будет возвращать всем сотрудникам вместе с другим именем, если оно есть, иначе Othername будет нулевым значением, которое вы могли бы обрабатывать в коде. Внутреннее соединение ограничивает результаты только работниками с соответствующей записью.

+0

Да, я хочу только вернуть другое имя, если есть соответствие – Frank

+0

Тогда исходный запрос должен выполнить задание. – Brandon

+0

ну, я хочу вернуть ВСЕ строки из Employee. Если есть совпадение, найденное в OTHERName, то извлеките это значение – Frank

0
SELECT E.EmpID, E.FirstName, E.LastName, E.Email, E.Phone, O.OtherName 
FROM Employee E 
    INNER JOIN Othername O 
     ON E.Firstname = O.Name 

следует сделать трюк

Или, если вы хотите, чтобы все результаты, даже те, без значений «другое имя».

SELECT E.EmpID, E.FirstName, E.LastName, E.Email, E.Phone, O.OtherName 
FROM Employee E 
    LEFT OUTER JOIN Othername O 
     ON E.Firstname = O.Name 
+0

Это отфильтрует всех сотрудников, у которых нет никакого «другого имени» - не то, что хотел OP, я полагаю .... –

+0

На основании комментариев плакатов он ищет точное совпадение. –

0

ВЫБОР E.EmpId, E.FirstName, E.LastName, E.Email, E.Phone, O.OtherName ОТ ЕМРЬОУЕЕ E INNER JOIN OTHERNAME О ПО E.FirstName = O.Name

+0

Это отфильтрует всех сотрудников, у которых нет никакого «другого имени» - не то, что хотел OP, я полагаю .... –

1

попробовать это:

SELECT 
    e.EmpID 
     CASE 
      WHEN o.OtherName IS NOT NULL THEN OtherName 
      ELSE e.FirstName 
     END AS FirstName 
     ,e.LastName 
     ,e.Email 
     ,e.Phone 
     ,o.OtherName 
    FROM Employee    e 
    LEFT OUTER JOIN OtherName o ON e.FirstName = o.Name 
1
select e.EmpID, e.FirstName, e.LastName, e.Email, e.Phone, o.OtherName 
from employee e,othername o 
where e.FirstName=o.name 
+1

вы должны использовать явный синтаксис JOIN и не присоединять таблицы с запятой. – Taryn

0

Вы можете использовать следующую команду SQL

SELECT EMPLOYEE.EmpID, 
     EMPLOYEE.FirstName, 
     EMPLOYEE.LastName, 
     EMPLOYEE.Email, 
     EMPLOYEE.Phone, 
     OTHERNAME.OtherName FROM EMPLOYEE INNER JOIN OTHERNAME ON EMPLOYEE.FirstName = OTHERNAME.Name