加入动态结果表?

时间:2016-03-24 18:23:06

标签: sql database join

我正在尝试加入这两个表格。我们打电话给一个员工,另一个员工信息:

Employees
Name         Title         ID
-------      -------     ------
John         Consultant    1
John         Engineer      2
Jane         Accountant    3

Employee Information
Name         EmailAddress    Project
------       -------------   ----------
John         John@work.com    Travelling
John         John1@work.com   Database Maintenance

我正在尝试加入表格,如下所示:

Desired Results
Name      Title       EmailAddress     Project
------    -----       -------------    ----------
John     Consultant   John@work.com    Travelling
John     Engineer     John1@work.com   Database Maintenance

但我不断得到这样的东西:

Actual Results
Name      Title       EmailAddress     Project
------    -----       -------------    ----------
John     Consultant   John@work.com    Travelling
John     Engineer     John@work.com    Database Maintenance
John     Consultant   John1@work.com   Travelling
John     Engineer     John1@work.com   Database Maintenance

我正在运行类似于此的查询:

SELECT * FROM Employees E INNER JOIN
EmployeeInformation EI ON E.Name = EI.Name

看着它,我可以理解为什么行数加倍,但我似乎无法找到获得所需输出的方法,任何建议?或者,由于我的过滤器太模糊,所以不可能吗?

3 个答案:

答案 0 :(得分:0)

您正在加入非唯一字段,这意味着它将为每个E.Name =“John”/EI.Name =“John”组合返回一行。

要解决此问题,您需要查找或创建两个表之间具有1:1关系的字段。 (假设每个员工在您的EI表中只有一行。)

例如,您可以利用E.ID来匹配您的EI表吗?

如果数据结构合理,EI表上应该有一个外键字段,它与您的Employee表中的主键(应该是E.ID)相对应。

答案 1 :(得分:0)

Employeeinformation表应具有employees表的主键。 请更改您的表结构,尝试向Employee information表添加一列,并从employees表更新ID。

答案 2 :(得分:0)

你的例子告诉我:

John has three titles.
John has two email addresses.
There is no relations that tells us which email goes with which title.

这一事实基本上就是为什么你会看到你所看到的结果。您的数据显示两封电子邮件都附带所有标题。如果要将特定电子邮件地址分配给特定人员/标题组合,则需要更改架构。