sql - 进行查询以根据条件合并两个表,并优先考虑第二个表中的行
问题描述
我有两个 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 脚本根据这样的几个标准合并表的好方法?
解决方案
您只需要UNION ALL
2 个表并NOT EXISTS
在WHERE
子句 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
推荐阅读
- docker - Openshift 源码到镜像构建策略
- javascript - 是否可以将类添加到 HTML 元素只是为了命名它们?
- python - 估计超参数调整的时间
- pandas - 数据帧 groupby nth 与第一个和最后一个行为相同
- microsoft-graph-api - Microsoft Teams:如何获取 Bot<->User 之间直接对话的聊天 ID?
- reactjs - 摆脱 CDN 包中的 Babel(StandAlone) 警告消息
- powershell - 如何检查某些程序是否已安装以及是否显示消息
- vue.js - Vue-i18n 和 v-select - 无法翻译
- installation - 无法启动 haproxy 2.4 - 最后一行缺少 LF?
- discord - discord.js 中的音量命令