我正在尝试使用FULL OUTER JOIN联接两个表,但是由于缺少一行,所以我没有达到我的期望。
我正试图将两个表连接到3个不同的列中。
表A:
CallId ASId DateTime CallStatus DurationSeconds
21280070 NULL 17/07/2019 in_queue 1
21280070 2099726 17/07/2019 agent_dialing 3
21280070 2099726 17/07/2019 agent_ringing 3
21280070 2099726 17/07/2019 speaking_agent 95
21280070 NULL 17/07/2019 in_queue 1
21280070 2098692 17/07/2019 agent_dialing 1
21280070 2098692 17/07/2019 agent_ringing 6
21280070 2098692 17/07/2019 speaking_agent 10
表B:
B.ASId B.CallId B.CallDetails B.DateTime B.Duration
2099726 21280070 dialing 17:21:41 3
2099726 21280070 ringing 17:21:44 3
2099726 21280070 incoming_call_in_conversation 17:23:19 95
2098692 21280070 dialing 17:23:21 1
2098692 21280070 ringing 17:23:27 6
2098692 21280070 incoming_call_in_conversation 17:23:37 10
2098692 21280070 wrapup 17:23:57 20
我想得到这样的东西:
A.CallId A.ASId A.DateTime A.CallStatus A.DurationSeconds B.ASId B.CallId B.CallDetails B.DateTime B.Duration
21280070 NULL 17:21:38 in_queue 1 NULL NULL NULL NULL NULL
21280070 2099726 17:21:41 agent_dialing 3 2099726 21280070 dialing 17:21:41 3
21280070 2099726 17:21:44 agent_ringing 3 2099726 21280070 ringing 17:21:44 3
21280070 2099726 17:23:19 speaking_agent 95 2099726 21280070 incoming_call 17:23:19 95
21280070 NULL 17:23:20 in_queue 1 NULL NULL NULL NULL NULL
21280070 2098692 17:23:21 agent_dialing 1 2098692 21280070 dialing 17:23:21 1
21280070 2098692 17:23:27 agent_ringing 6 2098692 21280070 ringing 17:23:27 6
21280070 2098692 17:23:37 speaking_agent 10 2098692 21280070 incoming_call 17:23:37 10
NULL NULL NULL NULL NULL 2098692 21280070 wrapup 17:23:57 20
我尝试了以下代码:
SELECT *
FROM table a
FULL OUTER JOIN table b
ON a.CallId = b.CallId AND a.ASId = b.ASId AND a.DateTime = b.DateTime
WHERE a.CallId = 21280070
ORDER BY a.DateTime
我得到的行比预期少了,最后一行包含了总结:
A.CallId A.ASId A.DateTime A.CallStatus A.DurationSeconds B.ASId B.CallId B.CallDetails B.DateTime B.Duration
21280070 NULL 17:21:38 in_queue 1 NULL NULL NULL NULL NULL
21280070 2099726 17:21:41 agent_dialing 3 2099726 21280070 dialing 17:21:41 3
21280070 2099726 17:21:44 agent_ringing 3 2099726 21280070 ringing 17:21:44 3
21280070 2099726 17:23:19 speaking_agent 95 2099726 21280070 incoming_call 17:23:19 95
21280070 NULL 17:23:20 in_queue 1 NULL NULL NULL NULL NULL
21280070 2098692 17:23:21 agent_dialing 1 2098692 21280070 dialing 17:23:21 1
21280070 2098692 17:23:27 agent_ringing 6 2098692 21280070 ringing 17:23:27 6
21280070 2098692 17:23:37 speaking_agent 10 2098692 21280070 incoming_call 17:23:37 10
有人知道为什么会这样吗?我不明白为什么最后一行没有显示。
非常感谢。
亲切的问候!
答案 0 :(得分:2)
由于a.CallId = 21280070
。因为当JOIN
不成功时,a.CallId
的值为NULL
,因此该子句将不成立。
一个猜测,您可能想要其中之一:
WHERE 21280070 IN (a.CallId,b.CallId)
WHERE a.CallId = 21280070
OR b.CallId = 21280070