具有多个表访问权限的完全外部联接 sql 左联接
Full outer join with multiple tables access sql left join
我有两个带有面板数据的 table(称为 tbl1 和 tbl3),另一个 table 用于将它们连接在一起 (tbl2)。 tbl1 有所有参与者的数据,但 tbl3 只有其中的一个子集。示例数据 table 是:
tbl1:
partkey
date
energy
1
1/1/2021
567
1
2/1/2021
585
2
1/1/2021
1305
2
2/1/2021
1324
3
1/1/2021
860
3
2/1/2021
869
tbl2:
partkey
assignkey
1
54
2
63
3
65
tbl3:
assignkey
dt
lossfactor
54
1/1/2021
.86
54
2/1/2021
.85
65
1/1/2021
.67
65
2/1/2021
.69
我想合并 table 以便获得所有记录,而不仅仅是两个 table 共有的记录。我还在代码中用 1 替换空值。这是所需的输出:
partkey
date
energy
lossfctr
1
2/1/2021
585
.85
2
2/1/2021
1324
1
3
2/1/2021
869
.69
我的代码现在知道匹配 id 但不知道匹配日期,所以我得到一个变量(能量)的日期-id 组合的值,但另一个变量(lossfactor)的所有日期的值).
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#));
我有两个带有面板数据的 table(称为 tbl1 和 tbl3),另一个 table 用于将它们连接在一起 (tbl2)。 tbl1 有所有参与者的数据,但 tbl3 只有其中的一个子集。示例数据 table 是:
tbl1:
partkey | date | energy |
---|---|---|
1 | 1/1/2021 | 567 |
1 | 2/1/2021 | 585 |
2 | 1/1/2021 | 1305 |
2 | 2/1/2021 | 1324 |
3 | 1/1/2021 | 860 |
3 | 2/1/2021 | 869 |
tbl2:
partkey | assignkey |
---|---|
1 | 54 |
2 | 63 |
3 | 65 |
tbl3:
assignkey | dt | lossfactor |
---|---|---|
54 | 1/1/2021 | .86 |
54 | 2/1/2021 | .85 |
65 | 1/1/2021 | .67 |
65 | 2/1/2021 | .69 |
我想合并 table 以便获得所有记录,而不仅仅是两个 table 共有的记录。我还在代码中用 1 替换空值。这是所需的输出:
partkey | date | energy | lossfctr |
---|---|---|---|
1 | 2/1/2021 | 585 | .85 |
2 | 2/1/2021 | 1324 | 1 |
3 | 2/1/2021 | 869 | .69 |
我的代码现在知道匹配 id 但不知道匹配日期,所以我得到一个变量(能量)的日期-id 组合的值,但另一个变量(lossfactor)的所有日期的值).
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#));