首页 > 解决方案 > 不存在数据时加入

问题描述

免责声明:我没有很多技术背景,只是学习 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 的列?

我怎样才能实现我正在寻找的东西?

标签: sqljoindb2

解决方案


如果要保证即使第二个表中没有匹配项也返回一行,只需将日期过滤器移至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')

推荐阅读