SQL组合两个表而不重复

时间:2017-05-02 21:21:21

标签: sql ms-access

我想基于列组合两个表。这是一个例子:

这是我的两张桌子:

    Table1                  Table2

Person | salary        Person | Age
Tim    |  22.50        Larry  | 32
Tony   |  49.00        Tim    | 22
John   |  32.67        Tony   | 44
Kim    |  23.42        John   | 31

我的结果表应该是:

Person | salary | Age
Larry  |        | 32
Tim    |  22.50 | 22 
Tony   |  49.00 | 44
John   |  32.67 | 31
Kim    |  23.42 |

每个人只被添加到结果表中一次,即使他们没有工资和年龄的值

提前致谢!

3 个答案:

答案 0 :(得分:2)

由于您已将其标记为MS-ACCESS,因此我将为MS ACCESS提供SQL代码

由于Microsoft无法执行FULL OUTER JOIN,因此您必须考虑使用现有SQL命令创建FULL OUTER JOIN的巧妙方法。以下代码应该使用上面的表格来实现:

SELECT Table1.Person, Salary, Age
FROM Table1 INNER JOIN Table2 ON Table1.Person = Table2.Person
UNION ALL
SELECT Table1.Person, Salary, Age
FROM Table1 LEFT JOIN Table2 ON Table1.Person = Table2.Person
WHERE Table2.Person Is Null
UNION ALL
SELECT Table2.Person, Salary, Age
FROM Table1 RIGHT JOIN Table2 ON Table1.Person = Table2.Person
WHERE Table1.Person Is Null

答案 1 :(得分:0)

这可以通过完全外部联接完成,但由于您使用ms访问权限,因此必须使用以下方式使用 union all
试试这个,如果你遇到任何困难,请告诉我。

SELECT * FROM table1 t1
LEFT JOIN 
table2 t2
ON t1.person = t2.person
UNION all
SELECT * FROM table1 t1
RIGHT JOIN 
table2 t2
ON t1.person = t2.person

答案 2 :(得分:0)

我没有看到你的问题究竟是什么,但这里有一个SQL查询,可以满足你的要求:

SELECT Person, salary, Age
FROM Table1 FULL OUTER JOIN Table2
WHERE Table1.Person = Table2.Person

编辑:由于缺乏对FULL OUTER JOINS的支持,这对MS-ACCESS不起作用,另外两个答案已经解释了替代方案。