2009-08-10 97 views
1

我遇到了SQL连接问题。SQL连接相关问题

我有一个表EMPLOYEEEmpID, 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

您是否以他们的替代名称致电所有人?那个叫理查德的人呢?如果替代名称真的与实际的员工ID而不是名字绑定在一起。 – pjp 2009-08-10 15:30:31

+0

否,因为OTHERNAME只有“查找”类型的数据。这意味着OTHERNAME将只有一个ROBERT,BOB的记录;或THOMAS,TOM的一项记录; 不管公司是否有12个罗伯茨。 – Frank 2009-08-10 15:33:38

回答

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 2009-08-10 15:29:20

+0

然后原始查询应该完成这项工作。 – Brandon 2009-08-10 15:31:09

+0

好吧,我想返回Employee的所有行。如果在OTHERName中找到匹配项,则重试该值 – Frank 2009-08-10 15:31:10

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所要求的,我推测.... – 2009-08-10 15:41:33

+0

根据海报评论,他正在寻找完全匹配。 – 2009-08-10 16:08:06

0

SELECT E.EmpId, E.FirstName, E.LastName, E.Email, E.Phone, O.OtherName FROM EMPLOYEEË INNER JOIN中文别名ö ON E.FirstName = O.Name

+0

这将过滤掉所有没有任何“其他名字”的员工 - 不是OP想要的东西,我想...... – 2009-08-10 15:42:48

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 2012-02-24 20:48:33

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