使用JOIN - 访问SQL

时间:2014-05-16 18:13:30

标签: ms-access-2007

我有两个表格,其中包含与这些名称对应的名称和几组不同的ID号 Table1的列包含:Name,ID1,ID2 表2包含以下列:名称,ID1,ID3

我想要一个包含Name,ID1,ID2和ID3

的表

我使用左连接从Table1获取Name,ID1,ID2并从Table2获取ID3,我使用右连接从Table2获取剩余的ID3值,以及相应的Name和ID1。这是它的样子:

SELECT [Table1].Name, [Table1].ID1, [Table1].ID2, [Table2].ID3
FROM [Table1] LEFT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1
UNION 
SELECT [Table2].Name, [Table2].ID1, [Table1].ID2, [Table2].ID3
FROM [Table1] RIGHT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1;

问题是两个表之间的名称存在一些格式差异(例如,表1中的ID1 = 1将具有名称“内华达大学”和表2中的“内华达大学”),所以我结束了重复的值。有没有办法摆脱重复,或更改查询,以便我不首先得到它们?

由于

1 个答案:

答案 0 :(得分:0)

如果为查询的第二部分添加一行,它将只选择table2中不在table1中的记录,从而避免重复:(在这种情况下,重复时,table1中的名称将在您的结果)

SELECT [Table1].Name, [Table1].ID1, [Table1].ID2, [Table2].ID3
FROM [Table1] LEFT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1
UNION 
SELECT [Table2].Name, [Table2].ID1, [Table1].ID2, [Table2].ID3
FROM [Table1] RIGHT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1
WHERE [Table1].ID1 is null ;

我不知道你对查询和理解他们感觉有多舒服,所以如果不清楚,我会快速解释。不同之处在于,您的联合查询的第二部分是从Table2中选择匹配ID2的整个Table1。 (因此图片中的整个绿色圆圈。)因此,添加第WHERE [Table1].ID1 is null行后,我们实际上只是选择那些Table2 Table1没有匹配ID1的记录价值。 (因此我们排除重叠,标记为红色,部分。) enter image description here