我是一位有访问权限的新手,我需要一些帮助。
我正在尝试在访问中合并两个表。
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
感谢您的帮助。
答案 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)
鉴于你提供了一个联盟和两个左联接应该做的伎俩。虽然这是一个糟糕的数据库设计或样本数据不好。
这就是为什么
给出样本数据和期望的结果;我的方法是将两个表中的所有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或者是年级人员的复合键。然后你不必在成绩表中有名字..除非你担心跟踪每个年级/年/学期的名称变化...