1

我正在尝试使用 SQL 在 MSAccess 中使用查询合并两个表。

表 1 包含以下列:

ID, address, rent, tax, basement, garage

表 2 有以下几列:

ID, address, rent, price, sold_date

在最终输出中,我想要

ID, address, rent, tax, price, basement, garage, sold_date一起。

两个表中的 ID 根本不一样。这有点像将两个表与相同的列名称链接在一起,并将不同的列留在不同的列中。

我尝试使用完全外部联接,MSAccess这已经很棘手但需要两个表具有相同的结构。

select * from Table1 left join Table2 On Table1.ID = Table2.ID Union select * from Table1 right join Table2 On Table1.ID = Table2.ID

上面的代码是我当前的代码,它检索数据而不将两个表与相同的列名合并在一起。这是从https://support.office.com/en-us/article/join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6了解到的

输出如下:

Table1.ID, Table1.address, Table1.rent, Table1.price, Table1.sold_date, Table2.ID, Table2.address, Table2.rent, Table2.price, Table2.sold_date

有没有一种巧妙的方法来做到这一点?

谢谢!

4

2 回答 2

1

您可以使用左连接和右连接的并集在 Access 中模拟完全外部连接:

SELECT t1.ID, t1.address, t1.rent, t1.tax, t2.price, t2.basement, t2.garage, t2.sold_date 
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.ID = t2.ID
UNION ALL
SELECT t1.ID, t1.address, t1.rent, t1.tax, t2.price, t2.basement, t2.garage, t2.sold_date
FROM Table1 t1
RIGHT JOIN Table2 t2 ON t1.ID = t2.ID
WHERE t1.id IS NULL;
于 2020-02-24T04:03:13.660 回答
0

另一种方法是生成所有 id 并使用LEFT JOIN

select t1.*, t2.*
from ((select id from Table1
       union   -- on purpose to remove duplicates
       select id from table2
      ) as i left join
      Table1 as t1
      on i.ID = t1.ID 
     ) left join
     Table2 as t2
     on i.ID = t2.ID ;

但是,蒂姆的解决方案也应该有效。在某些版本的 MS Access 中,您可能需要UNION用视图替换。

于 2020-02-24T13:09:26.337 回答