如何连接两个表并显示源?

Posted

技术标签:

【中文标题】如何连接两个表并显示源?【英文标题】:How to join two tables and show source? 【发布时间】:2019-11-26 13:01:29 【问题描述】:

如何连接两个表中的值...

表_1:

ID | Value
----------
10 | Dog
27 | Cat

表_2:

ID | Value
----------
27 | Cat

我的 SQL...(Microsoft Access 2016)

SELECT ID, VALUE , "YES" AS Table_1, NULL AS Table_2
FROM Table_1 
UNION 
SELECT ID, VALUE, NULL AS Table_1, "YES" AS Table_2
FROM Table_2

...返回这个结果:

ID | Value | Table_1 | Table_2
------------------------------
10 | Dog   | YES     | 
27 | Cat   | YES     | 
27 | Cat   |         | YES

但我想得到这样的结果:

ID | Value | Table_1 | Table_2
------------------------------
10 | Dog   | YES     | 
27 | Cat   | YES     | YES

【问题讨论】:

【参考方案1】:

你可以使用聚合和union all:

select id, value, max(table_1) as table_1, max(table_2) as table_2
from (select ID, VALUE , "YES" AS Table_1, NULL AS Table_2
      from Table_1 
      union 
      select ID, VALUE, NULL AS Table_1, "YES" AS Table_2
      from Table_2
     ) t
group by id, value;

SQL 中的替代方法是 FULL JOIN,但 MS Access 不支持完全连接。

【讨论】:

【参考方案2】:

您可以制作一个 table1 + table2 值的列表,然后使用简单的 jeft join 检查这些值是否存在于 table2 或 2 中。

select 
  base.*,
  iif(isnull(t.value), null, 'YES') table1,
  iif(isnull(t2.value), null, 'YES') table2
from 
  (
    Select value from Table_1 -- if you have duplicate values add groupby here
    union
    select value from Table_2
  ) base -- Make a collection of values from table1 and 2
  left join Table_1 T on base.value = T.value
  left join Table_2 T2 on base.value = T2.value;

不确定您是否可以在design view 中打开上述查询,但该查询应该可以在访问中工作。要对design view 友好,您需要为base 创建一个查询对象,然后您可以简单地进行左连接和iifs

【讨论】:

以上是关于如何连接两个表并显示源?的主要内容,如果未能解决你的问题,请参考以下文章

连接两个表并显示发票编号总额的 SQL 查询

如何使用枢轴连接两个表并在一个表中组合两个字段

如何连接两个表并选择不匹配的列

如何连接两个 XML 表并嵌套而不重复

Mysql连接两个表并根据主键计算总记录

如何通过聚合连接mongoDB中的两个表并需要根据匹配获取结果[重复]