在日期时间创建的记录上加入两个记录表 - SQL
Joining two record tables on record created on date time - SQL
我正在尝试连接(完全外部连接)两条记录或历史 table,其中包含有关客户端状态的信息。每条记录都有创建记录时的日期时间字段,以及新旧状态。
Table一个
ID
A CreatedOn
A Status OLD
A Status NEW
10001
2/05/2021 12:00:00
NULL
Hungry
10001
3/05/2021 12:00:00
Hungry
Sad
TableB
ID
B CreatedOn
B Status OLD
B Status NEW
10001
2/05/2021 12:00:00
NULL
Active
10001
4/05/2021 12:00:00
Active
Inactive
我想要的结果是一条记录 table,其中包含每个日期时间的所有状态更改。
A CreatedOn
A Status OLD
A Status NEW
B CreatedOn
B Status OLD
B Status NEW
2/05/2021 12:00:00
NULL
Hungry
2/05/2021 12:00:00
NULL
Active
3/05/2021 12:00:00
Hungry
Sad
NULL
NULL
NULL
NULL
NULL
NULL
4/05/2021 12:00:00
Active
Inactive
然而,我的查询结果,returns a table 没有来自 Table B
的最后一条记录
A CreatedOn
A Status OLD
A Status NEW
B CreatedOn
B Status OLD
B Status NEW
2/05/2021 12:00:00
NULL
Hungry
2/05/2021 12:00:00
NULL
Active
3/05/2021 12:00:00
Hungry
Sad
NULL
NULL
NULL
我拥有的并不复杂...但我不知道为什么它不起作用。
SELECT *
FROM A
FULL OUTER JOIN B
ON A.A_CreatedOn = B.B_CreatedOn
我的完整查询与此类似
SELECT
[A_CreatedOn]
,[Status A OLD]
,[Status A NEW]
,[B_CreatedOn]
,[Status B OLD]
,[Status B NEW]
FROM A
FULL OUTER JOIN B
ON A.A_CreatedOn = B.B_CreatedOn
JOIN C
ON A.ID = C.ID
WHERE C = '10001'
JOIN C
ON A.ID = C.ID
WHERE C = '10001'
问题应该出在这种情况下。检查此地点的加入条件。
问题是 JOIN
条件,因为使用 FULL JOIN
你可以在 Table A
的 ID
中有 NULL
可以使用这个JOIN条件来解决问题
JOIN C ON ISNULL(A.ID, B.ID) = C.ID
WHERE C = '10001'
我正在尝试连接(完全外部连接)两条记录或历史 table,其中包含有关客户端状态的信息。每条记录都有创建记录时的日期时间字段,以及新旧状态。
Table一个
ID | A CreatedOn | A Status OLD | A Status NEW |
---|---|---|---|
10001 | 2/05/2021 12:00:00 | NULL | Hungry |
10001 | 3/05/2021 12:00:00 | Hungry | Sad |
TableB
ID | B CreatedOn | B Status OLD | B Status NEW |
---|---|---|---|
10001 | 2/05/2021 12:00:00 | NULL | Active |
10001 | 4/05/2021 12:00:00 | Active | Inactive |
我想要的结果是一条记录 table,其中包含每个日期时间的所有状态更改。
A CreatedOn | A Status OLD | A Status NEW | B CreatedOn | B Status OLD | B Status NEW |
---|---|---|---|---|---|
2/05/2021 12:00:00 | NULL | Hungry | 2/05/2021 12:00:00 | NULL | Active |
3/05/2021 12:00:00 | Hungry | Sad | NULL | NULL | NULL |
NULL | NULL | NULL | 4/05/2021 12:00:00 | Active | Inactive |
然而,我的查询结果,returns a table 没有来自 Table B
的最后一条记录A CreatedOn | A Status OLD | A Status NEW | B CreatedOn | B Status OLD | B Status NEW |
---|---|---|---|---|---|
2/05/2021 12:00:00 | NULL | Hungry | 2/05/2021 12:00:00 | NULL | Active |
3/05/2021 12:00:00 | Hungry | Sad | NULL | NULL | NULL |
我拥有的并不复杂...但我不知道为什么它不起作用。
SELECT *
FROM A
FULL OUTER JOIN B
ON A.A_CreatedOn = B.B_CreatedOn
我的完整查询与此类似
SELECT
[A_CreatedOn]
,[Status A OLD]
,[Status A NEW]
,[B_CreatedOn]
,[Status B OLD]
,[Status B NEW]
FROM A
FULL OUTER JOIN B
ON A.A_CreatedOn = B.B_CreatedOn
JOIN C
ON A.ID = C.ID
WHERE C = '10001'
JOIN C
ON A.ID = C.ID
WHERE C = '10001'
问题应该出在这种情况下。检查此地点的加入条件。
问题是 JOIN
条件,因为使用 FULL JOIN
你可以在 Table A
ID
中有 NULL
可以使用这个JOIN条件来解决问题
JOIN C ON ISNULL(A.ID, B.ID) = C.ID
WHERE C = '10001'