首页 > 解决方案 > 进行查询以根据条件合并两个表,并优先考虑第二个表中的行

问题描述

我有两个 MS Access 表。

table1
ID  Country     Dat         Val
1   Australia   01.10.2021  10
2   Canada      01.10.2021  100
3   Japan       01.10.2021  1000
4   Australia   02.10.2021  20
5   Canada      02.10.2021  200
6   Japan       02.10.2021  2000

table2
ID  Country     Dat         Val
1   Canada      01.10.2021  50000
2   Greece      01.10.2021  50100
3   Canada      02.10.2021  60000
4   Greece      02.10.2021  60100

这个 SQL 代码允许我合并两个表,它提供 10 行。

   SELECT table2.Dat,
          table2.Country,
          table2.Val
     FROM table2
LEFT JOIN table1
       ON (table1.Dat = table2.Dat)
      AND (table1.Country = table2.Country)

UNION ALL

   SELECT table1.Dat,
          table1.Country,
          table1.Val
     FROM table1
LEFT JOIN table2
       ON (table1.Dat = table2.Dat)
      AND (table1.Country = table2.Country)

 ORDER BY table2.Dat,
          table2.Country;

它根据“日期”和“国家”标准给出重复项。

问题

我想知道,如果我想以某种方式合并两个表,如果 table1 和 table2 具有相同的“日期”和“国家”,那么代码应该是什么样子,然后会选择 table2 行,而不是两者?

换句话说,如何从 table1 和 table2中获取不符合条件“日期”和“国家”的所有唯一行,以及两个表中的行匹配条件“日期”和“国家”时优先表 2 ?

(“日期+国家”捆绑在每个表中是唯一的,即一个表中只有一个“数据+国家”)

换句话说,我可以使用什么查询来使结果看起来像这样,即 8 行没有日期 + 国家重复?

Expected Result
Dat         Country     Val
01.10.2021  Australia   10
01.10.2021  Canada      50000
01.10.2021  Greece      50100
01.10.2021  Japan       1000
02.10.2021  Australia   20
02.10.2021  Canada      60000
02.10.2021  Greece      60100
02.10.2021  Japan       2000

什么可能是使此类 SQL 脚本根据这样的几个标准合并表的好方法?

标签: sqldatabasems-accessunion-all

解决方案


您只需要UNION ALL2 个表并NOT EXISTSWHERE子句 for 中使用table1

SELECT t1.Dat, t1.Country,  t1.Val FROM table1 AS t1
WHERE NOT EXISTS (SELECT 1 FROM table2 AS t2 WHERE t2.Country = t1.Country AND t2.Dat = t1.Dat)
UNION ALL
SELECT Dat, Country, Val FROM table2
ORDER BY Dat, Country

结果:

Dat         Country     Val
1/10/2021   Australia   10
1/10/2021   Canada      50000
1/10/2021   Greece      50100
1/10/2021   japan       1000
2/10/2021   Australia   20
2/10/2021   Canada      60000
2/10/2021   Greece      60100
2/10/2021   Japan       2000

推荐阅读