sql - 不存在数据时加入
问题描述
免责声明:我没有很多技术背景,只是学习 SQL,所以很抱歉。 我有 2 个账户信息表 - 一个参考数据 (ACCT_RD) 和一个 txn 数据 (ACCT_TD)。
ACCT_RD 是这样的
ACCT_ID | ACCT_NAME |
---|---|
1 | 美国广播公司 |
2 | xyz |
ACCT_TD 是这样的
ACCT_ID | 日期 | 价值 |
---|---|---|
1 | 01-31-2020 | 4000.33 |
1 | 01-31-2021 | 2000.11 |
2 | 01-31-2020 | 5666.23 |
我想要一个查询,我将在其中传递帐户 ID 和日期,它会以格式返回我的数据
ACCT_ID | 姓名 | 日期 | 价值 |
---|---|---|---|
1 | 美国广播公司 | 01-31-2020 | 4000.33 |
1 | 美国广播公司 | 无效的 | 无效的 |
可能 ACCT_TD 可能不包含所有日期的数据(无行),但 ACCT_RD 将始终包含信息。
我正在尝试左加入
SELECT R.ACCT_ID, R.NAME, T.VALUE, T.DATE
FROM ACCT_RD R
LEFT JOIN ACCT_TD T ON R.ACCT_ID = T.ACCT_ID
WHERE R.ACCT_ID = 1
AND T.DATE IN ('01-31-2000','01-31-2020')
我得到一行,其中两个都有数据,没有行,我在 ACCT_TD 中没有数据。
是否因为在 ACCT_TD 中不存在日期“01-31-2000”的行并且它不是 ACCT_RD 的列?
我怎样才能实现我正在寻找的东西?
解决方案
如果要保证即使第二个表中没有匹配项也返回一行,只需将日期过滤器移至on
子句:
SELECT R.ACCT_ID, R.NAME, T.VALUE, T.DATE
FROM ACCT_RD R LEFT JOIN
ACCT_TD T
ON R.ACCT_ID = T.ACCT_ID AND
T.DATE IN ('01-31-2000', '01-31-2020')
WHERE R.ACCT_ID = 1;
NULL
如果不匹配,则值为。
此外,如果您的列确实是日期,那么您应该使用正确的日期格式:
T.DATE IN ('2000-01-31', '2000-01-31')
推荐阅读
- c# - Net core 2 地图产品在结果 SQL 中具有多个属性
- machine-learning - 如何在 Keras 中的模型之前获得密集层的权重(内核)?
- c# - Windows 窗体 DataGridView - 自定义单元格以根据出生日期查看年龄
- prestashop - 在子域中实现 Prestashop 多站点
- scala - 如何简洁地检查元组是否没有重叠成员
- haskell - Haskell 中的异构引用相等
- reactjs - 在 React 中加载没有云的 TinyMCE
- events - Cloud Foundry - 如何订阅/观看 firehose 事件?
- r - seq.int(0, to0 - from, by) 中的错误:'to' 必须是有限数
- python - 为 Python 列表中的每个机场制作首字母缩写词?