首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用完全外连接时缺少某些行

使用完全外连接时缺少某些行
EN

Stack Overflow用户
提问于 2019-07-19 00:04:37
回答 1查看 78关注 0票数 2

我正在尝试使用完全的外连接来连接两个表,但是我没有得到我期望的结果,因为缺少一行。

我正在尝试在3个不同的列中连接这两个表。

表A:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

我想得到这样的东西:

代码语言:javascript
复制
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

我尝试了下面的代码:

代码语言:javascript
复制
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

我得到的结果比我预期的少了一行,最后一行是wrapup:

代码语言:javascript
复制
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

有谁知道为什么会发生这种事吗?我不能理解为什么最后一行没有显示。

在此之前,非常感谢您。

致以亲切的问候!

EN

回答 1

Stack Overflow用户

发布于 2019-07-19 00:10:53

因为a.CallId = 21280070。因为当JOIN不成功时,a.CallId的值将为NULL,而此子句将不为真。

在猜测中,你可能想要其中之一:

代码语言:javascript
复制
WHERE 21280070 IN (a.CallId,b.CallId)

WHERE a.CallId = 21280070
   OR b.CallId = 21280070
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57098622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档