ms-access - 多表全外连接访问sql左连接
问题描述
我有两个包含面板数据的表(称为 tbl1 和 tbl3)和另一个用于将它们连接在一起的表(tbl2)。tbl1 有所有参与者的数据,但 tbl3 只有其中的一个子集。示例数据表是:
表1:
零件键 | 日期 | 活力 |
---|---|---|
1 | 2021 年 1 月 1 日 | 567 |
1 | 2021 年 2 月 1 日 | 585 |
2 | 2021 年 1 月 1 日 | 1305 |
2 | 2021 年 2 月 1 日 | 1324 |
3 | 2021 年 1 月 1 日 | 860 |
3 | 2021 年 2 月 1 日 | 869 |
表2:
零件键 | 分配键 |
---|---|
1 | 54 |
2 | 63 |
3 | 65 |
表3:
分配键 | dt | 损失因子 |
---|---|---|
54 | 2021 年 1 月 1 日 | .86 |
54 | 2021 年 2 月 1 日 | .85 |
65 | 2021 年 1 月 1 日 | .67 |
65 | 2021 年 2 月 1 日 | .69 |
我想合并这些表,以便获得所有记录,而不仅仅是两个表共有的记录。我还在代码中将空值替换为 1。这是所需的输出:
零件键 | 日期 | 活力 | 损失函数 |
---|---|---|---|
1 | 2021 年 2 月 1 日 | 585 | .85 |
2 | 2021 年 2 月 1 日 | 1324 | 1 |
3 | 2021 年 2 月 1 日 | 869 | .69 |
我的代码现在知道匹配 id 但不匹配日期,因此我得到一个变量(能量)的日期-id 组合的值,但另一个变量(损失因子)的所有日期的值。
SELECT tbl1.partkey, tbl1.date, tbl1.energy, IIf(IsNull(tbl3.lossfactor),1,tbl3.lossfactor) AS lossfctr FROM (tbl1 INNER JOIN tbl2 ON tbl2.partkey = tbl1.partkey ) left join tbl3 on tbl2.assignkey = tbl3.assignkey WHERE ( ((tbl1.partkey=1) OR (tbl1.partkey=2) OR (tbl1.partkey=3)) AND (tbl1.date=#2/1/2021#) AND (tbl3.dt=#2/1/2021#))
UNION
SELECT tbl1.partkey, tbl1.date, tbl1.energy, IIf(IsNull(tbl3.lossfactor),1,tbl3.lossfactor) AS lossfctr FROM (tbl1 INNER JOIN tbl2 ON tbl2.partkey = tbl1.partkey ) left join tbl3 on tbl1.date = tbl3.dt WHERE ( ((tbl1.partkey=1) OR (tbl1.partkey=2) OR (tbl1.partkey=3)) AND (tbl1.date=#2/1/2021#) AND (tbl3.dt=#2/1/2021#));
`
我还尝试在 id 和日期这两个列上进行左连接,但它给了我一个错误。
谢谢!这两个链接很有帮助: https: //support.microsoft.com/en-us/office/join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6
解决方案
考虑:
SELECT Query1.partkey, Query1.date, Query1.energy, Nz([lossfactor],1) AS LF
FROM
(SELECT tbl1.partkey, tbl1.Date, tbl1.energy, tbl2.assignkey
FROM tbl1 INNER JOIN tbl2 ON tbl1.partkey = tbl2.partkey) AS Query1
LEFT JOIN tbl3 ON (Query1.date = tbl3.dt) AND (Query1.assignkey = tbl3.assignkey)
WHERE (((Query1.date)=#2/1/2021#));
推荐阅读
- visual-studio-code - 我有窗口 10 企业、WSl2、Ubuntou 20.004、VSC 尝试 WSL 代码。在第 12 行崩溃
- python - 和有什么区别?并且没有张量形状
- javascript - 由于超出视口,无法滚动 SectionList 直到最后一个项目
- iis - IdentityServer4 众所周知的 URL 是 http,除了 IIS 反向代理后面的颁发者 URL
- javascript - 赛普拉斯在 .then 范围之外产生布尔变量
- python - 我的按钮功能在我的 Python 代码中不起作用
- r - 如何使用 R 组织 MLE 的输出
- javascript - 每隔几毫秒获取 mp3 文件的音高
- python - 无法将 pip 模块与 PyO3 一起使用
- android - 在 HMS Push Kit API 中获取访问令牌时出错