如何在Access 2010中组合表

时间:2018-02-19 16:33:18

标签: ms-access join union

我是一位有访问权限的新手,我需要一些帮助。

我正在尝试在访问中合并两个表。

Table 1:
ID      First_Name   Last_Name     Gender
12345   John         Doe           F
22345   Jane         Clin          M

Table 2:
ID       First_Name   Last_Name     Grade
12345    Curt         Doe            2
12345    Carry        Doe            3
12345    Sid          Doe            1
22345    Mel          Clin           7

如何在Access中编写SQL以显示

ID      First_Name   Last_Name     Gender   Grade
12345   John         Doe           F
12345   Curt         Doe           M         2
12345   Carry        Doe                     3
12345   Sid          Doe                     1
22345   Jane         Clin          M
22345   Mel          Clin                    7

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

SELECT A.ID, A.First_Name, A.Last_Name, A.Gender, B.Grade
FROM TABLE_1 A 
INNER JOIN TABLE_2 B 
  on A.ID=B.ID;

你做过这些桌子还是这个你一直困扰的东西?如果我们假设ID是这些中的公共项,那么您不希望在两个表中放置First_Name和Last_Name。只需在两个表中包含ID即可建立链接。 如果要包括TABLE_2中的所有内容,无论它们是否存在于TABLE_2中,则将INNER JOIN更改为LEFT OUTER JOIN。

修改 我认为我假设TABLE_1是主要版本时犯了一个错误。我认为在这个特殊情况下你真正想要的是一个工会。

SELECT U.ID, U.First_Name, U.Last_Name, U.Gender, U.Grade 
FROM (SELECT ID, First_Name, Last_Name, Gender, '' AS Grade 
      FROM TABLE_1
      UNION
      SELECT ID, First_Name, Last_Name, '' AS Gender, Grade 
      FROM TABLE_2) U

HTH, 麦克

答案 1 :(得分:0)

鉴于你提供了一个联盟和两个左联接应该做的伎俩。虽然这是一个糟糕的数据库设计或样本数据不好。

这就是为什么

  1. 所有用户的ID都相同
  2. 似乎必须加入名字和姓氏,我们都知道拼写错误和名称更改变得难以管理,因此数据输入错误导致我们得到不正确的结果。
  3. Curt在​​您的样本结果中有性别但样本数据中不存在。这个价值来自哪里?
  4. 我假设ID应该与记录有关;但我们必须加入ID,名字和姓氏才能获得独特的记录。没有这些知识的那些桌子上有哪些PK我们的答案是纯粹的猜测。
  5. 如果我们假设Table1的PK是ID,而Table2 ID是table1的外键,那么我们应该能够加入ID;但样本数据并未反映出这一点。那么每张桌子上的PK和FK是什么?
  6. 给出样本数据和期望的结果;我的方法是将两个表中的所有ID和名称合并为一组数据,然后外部将此数据连接回table1和table2以获得性别和等级。理想情况下,我们只是加入ID;但是样本数据似乎并不表示ID是这两个表的主键/外键。

    SELECT Der.ID, Der.First_name, Der.Last_name, T1.Gender, T2.Grade
    FROM (SELECT ID, First_Name, Last_name
          FROM table1
          UNION 
          SELECT ID, First_Name, Last_name
          FROM Table2) DER
    LEFT JOIN Table1 T1
     on T1.Id = Der.ID
    and T1.First_name = Der.First_name
    and T1.Last_name = Der.Last_name
    LEFT JOIN table2 T2
     on T2.Id = Der.ID
    and T2.First_name = Der.First_name
    and T2.Last_name = Der.Last_name
    

    为什么?

    因为这两个表都不包含您在结果中需要的完整名称列表,但它们合并了;因此需要派生一个包含所有名称和ID的表。然后外部联接允许我们获得联合集的性别和等级。

    但在进一步发展之前;我真的看看桌面设计并了解PK / FK关系并确保您的数据准确无误。表1似乎是“人”表,而表2更多是每个班级/年级/年表的等级。这将是一个1:M的关系;因此,人员表的ID应该是“等级”表的FK,该表应该是PK或者是年级人员的复合键。然后你不必在成绩表中有名字..除非你担心跟踪每个年级/年/学期的名称变化...