sql - 列值可能来自 3 个表中的 1 个(未标准化)
问题描述
我需要一个查询来填充报告。大多数数据将主要来自一个表 (payment_history),但其中一列 (Payee Name) 将来自三个表之一(它们几乎相同,第三个表有更多列,并且键列的名称不同)。我唯一尝试过的是左外连接,但所做的只是添加更多列。我需要一列由三个不同的表填充
示例(在此示例中,值位于 bank_payees 表中:
伪
select payment_history.Date, payment_history.Amount, payees_table_query.PayeeName, payees_table_query.PayeeId
from payment_history
表payment_history
日期 | 数量 | 收款人实例 |
---|---|---|
2019 年 1 月 20 日 | 150.21 | 1ef55 |
2020 年 4 月 1 日 | 1175.00 | A0z1l |
表user_payee_instance
收款人实例 | 收款人 ID |
---|---|
1ef55 | 1234 |
A0z1l | 00a14468 |
表userpayees
收款人 ID | 收款人姓名 |
---|---|
无效的 | 无效的 |
表bank_payees
收款人 ID | 收款人姓名 |
---|---|
1234 | 沃尔玛 |
表global_payees
内部收款人 ID | 收款人姓名 | 行业代码 | 客户ID |
---|---|---|---|
00a14468 | 大通银行 | 9933 | 1000111 |
结果
日期 | 数量 | 收款人姓名 | 收款人 ID |
---|---|---|---|
2019 年 1 月 20 日 | 150.21 | 沃尔玛 | 1234 |
2020 年 4 月 1 日 | 1175.00 | 大通银行 | 00a14468 |
解决方案
如果您UNION ALL
是三个收款人表,则可以将它们视为一个表(它们可能应该放在首位)。
然后它只是将表连接在一起。
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
推荐阅读
- java - 在Java Stream中的多个数组内循环
- mysql - MySQL连接行值作为列名
- vue.js - 在类星体框架数据表中获取选定的行 ID
- mysql - MySQL + NodeJS - 当对表执行 CUD 操作时,在表中维护 AuditLog 历史记录
- python - 配置参数未从其他位置读取
- json - 获取 JSON 并将其添加到数组中
- class - 如何在颤动中将数据从 TextFormField 传递到 List?
- java - 将 Clock 作为构造函数参数注入的 Spring 问题
- angular - 是否可以在角度 4 的 onclick 事件中从服务调用函数
- selenium - Protractor Selenium Standalone 服务器出现超时错误