join/where 子句后数据丢失

问题描述 投票:0回答:1

我有一个表(表1),只有一列,是月份级别的日期列表: 2023-12-01、2024-01-01、2024-01-01等

我有另一个表(表2),其日期列采用 YYYY-MM-DD 00:00:00 格式。还有一个记录#列。

记录# 日期
记录1 2024-01-23 xyz时间
记录2 2024-01-13 xyz时间
记录3 2024-02-12 xyz时间
记录4 2024-03-04 xyz时间

我想维护表 1 中的日期列表,并将表 2 中的所有记录与表 1 中的日期对齐。

t1.日期 记录# t2.日期
2023-12-01
2024-01-01 记录1 2024-01-23 xyz时间
2024-01-01 记录2 2024-01-13 xyz时间
2024-02-01 记录3 2024-02-12 xyz时间
2024-03-01 记录4 2024-03-04 xyz时间

我试过这个:

SELECT t1.date, t2.record, t2.date
FROM t1 
LEFT JOIN t2  ON DATEADD(MONTH, DATEDIFF(MONTH, 0, t1.date), 0) LIKE DATEADD(MONTH, DATEDIFF(MONTH, 0, t2.date), 0)

但是我丢失了 2023-12-01 的空白行。我认为是连接子句造成的,但我不确定为什么 LEFT JOIN 不保留数据。我尝试了 OUTER join 但得到了相同的结果。

有人可以帮忙吗?

sql sql-server date join
1个回答
0
投票

我将 WHERE 子句移至连接子句中,现在我看到空白行。

© www.soinside.com 2019 - 2024. All rights reserved.