列值可能来自 3 个表中的 1 个(未规范化)
Column value could come from 1 of 3 tables (not normalized)
我需要一个查询来填充报告。大多数数据将主要来自一个 table(payment_history),但其中一列(收款人姓名)将来自三个 table 之一(它们是 几乎 相同,第三个table 有更多的列并且键列的名称不同)。我唯一尝试过的是 left outer join 但所做的只是添加更多列。我需要一列由三个不同的 tables
填充
示例(在此示例中,值在 bank_payees table:
伪
select payment_history.Date, payment_history.Amount, payees_table_query.PayeeName, payees_table_query.PayeeId
from payment_history
Table payment_history
日期
金额
收款人实例
1/20/2019
150.21
1ef55
2020 年 4 月 1 日
1175.00
A0z1l
Tableuser_payee_instance
收款人实例
收款人编号
1ef55
1234
A0z1l
00a14468
Table 用户收款人
收款人编号
收款人姓名
无
无
Tablebank_payees
收款人编号
收款人姓名
1234
沃尔玛
Tableglobal_payees
InternalPayeeId
收款人姓名
行业代码
客户编号
00a14468
大通银行
9933
1000111
结果
日期
数量
收款人姓名
收款人编号
1/20/2019
150.21
沃尔玛
1234
2020 年 4 月 1 日
1175.00
大通银行
00a14468
如果您 UNION ALL
三个收款人 table,您可以将它们视为一个 table (它们可能应该放在第一位).
那么它只是将 table 连接在一起。
SELECT
*
FROM
payment_history
LEFT JOIN
user_payee_instance
ON user_payee_instance.PayeeInstance = payment_history.PayeeInstance
LEFT JOIN
(
SELECT PayeeId, PayeeName FROM userpayees
UNION ALL
SELECT PayeeId, PayeeName FROM bank_payees
UNION ALL
SELECT InternalPayeeId, PayeeName FROM global_payees
)
AS payees
ON payees.PayeeId = user_payee_instance.PayeeId
我需要一个查询来填充报告。大多数数据将主要来自一个 table(payment_history),但其中一列(收款人姓名)将来自三个 table 之一(它们是 几乎 相同,第三个table 有更多的列并且键列的名称不同)。我唯一尝试过的是 left outer join 但所做的只是添加更多列。我需要一列由三个不同的 tables
填充示例(在此示例中,值在 bank_payees table:
伪
select payment_history.Date, payment_history.Amount, payees_table_query.PayeeName, payees_table_query.PayeeId
from payment_history
Table payment_history
日期 | 金额 | 收款人实例 |
---|---|---|
1/20/2019 | 150.21 | 1ef55 |
2020 年 4 月 1 日 | 1175.00 | A0z1l |
Tableuser_payee_instance
收款人实例 | 收款人编号 |
---|---|
1ef55 | 1234 |
A0z1l | 00a14468 |
Table 用户收款人
收款人编号 | 收款人姓名 |
---|---|
无 | 无 |
Tablebank_payees
收款人编号 | 收款人姓名 |
---|---|
1234 | 沃尔玛 |
Tableglobal_payees
InternalPayeeId | 收款人姓名 | 行业代码 | 客户编号 |
---|---|---|---|
00a14468 | 大通银行 | 9933 | 1000111 |
结果
日期 | 数量 | 收款人姓名 | 收款人编号 |
---|---|---|---|
1/20/2019 | 150.21 | 沃尔玛 | 1234 |
2020 年 4 月 1 日 | 1175.00 | 大通银行 | 00a14468 |
如果您 UNION ALL
三个收款人 table,您可以将它们视为一个 table (它们可能应该放在第一位).
那么它只是将 table 连接在一起。
SELECT
*
FROM
payment_history
LEFT JOIN
user_payee_instance
ON user_payee_instance.PayeeInstance = payment_history.PayeeInstance
LEFT JOIN
(
SELECT PayeeId, PayeeName FROM userpayees
UNION ALL
SELECT PayeeId, PayeeName FROM bank_payees
UNION ALL
SELECT InternalPayeeId, PayeeName FROM global_payees
)
AS payees
ON payees.PayeeId = user_payee_instance.PayeeId