Вопрос, связанный с соединением SQL

У меня возникли проблемы с вопросом о присоединении к SQL.

У меня есть таблица 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

person Frank    schedule 10.08.2009    source источник
comment
Вы называете всех их альтернативными именами. А как насчет людей по имени Ричард...? Должно ли альтернативное имя действительно быть привязано к фактическому идентификатору сотрудника, а не к имени.   -  person pjp    schedule 10.08.2009
comment
Нет, потому что OTHERNAME содержит только данные типа поиска. Это означает, что OTHERNAME будет иметь только одну запись для ROBERT, BOB; или одна запись для THOMAS,TOM; независимо от того, 12 ли Робертов в компании.   -  person Frank    schedule 10.08.2009


Ответы (6)


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

Судя по вашим комментариям, вы действительно хотите внешнее соединение.

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

person Brandon    schedule 10.08.2009
comment
Тогда исходный запрос должен выполнить эту работу. - person Brandon; 10.08.2009
comment
ну, я хочу вернуть ВСЕ строки из Employee. Если в OTHERName найдено совпадение, повторно запустите это значение. - person Frank; 10.08.2009
comment
Тогда это будет внешнее соединение. Внешнее соединение вернет всех сотрудников вместе с Othername, если оно есть, иначе Othername будет нулевым значением, которое вы могли бы обработать в коде. Внутреннее объединение ограничивает результаты только сотрудниками с соответствующей записью. - person Brandon; 10.08.2009
comment
Нет проблем, но если вопрос был решен, не забудьте отметить его как ответ. - person Brandon; 10.08.2009

попробуй это:

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
person KM.    schedule 10.08.2009

ВЫБЕРИТЕ E.EmpId, E.FirstName, E.LastName, E.Email, E.Phone, O.OtherName FROM EMPLOYEE E INNER JOIN OTHERNAME O ON E.FirstName = O.Name

person flayto    schedule 10.08.2009
comment
Это отфильтрует всех сотрудников, у которых нет другого имени - я полагаю, это не то, чего хотел ОП .... - person marc_s; 10.08.2009

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
person Mitchel Sellers    schedule 10.08.2009
comment
Это отфильтрует всех сотрудников, у которых нет другого имени - я полагаю, это не то, чего хотел ОП .... - person marc_s; 10.08.2009
comment
Судя по комментариям к плакатам, он ищет точное совпадение. - person Mitchel Sellers; 10.08.2009

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

SELECT EMPLOYEE.EmpID, 
       EMPLOYEE.FirstName, 
       EMPLOYEE.LastName, 
       EMPLOYEE.Email, 
       EMPLOYEE.Phone, 
       OTHERNAME.OtherName FROM EMPLOYEE INNER JOIN OTHERNAME ON EMPLOYEE.FirstName = OTHERNAME.Name
person Ajitha Ms    schedule 25.12.2013

person    schedule
comment
вы должны использовать явный синтаксис JOIN и не соединять таблицы запятой. - person Taryn; 25.02.2012