首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带on条件的完全外连接

不带on条件的完全外连接
EN

Stack Overflow用户
提问于 2020-08-25 09:08:30
回答 2查看 42关注 0票数 0

SQL新手。

我有两个SQL表T1和T2,如下所示

代码语言:javascript
运行
复制
T1
customer_key X1 X2 X3
1000         60 10  2018-02-01
1001         42 9   2018-02-01
1002         03 1   2018-02-01
1005         15 1   2018-02-01
1002         32 2   2018-02-05

T2
customer_key A1 A2 A3
1001         20 2  2018-02-17
1002         25 2  2018-02-11
1005         04 1  2018-02-17
1009         02 0  2018-02-17

我希望通过连接T1和T2并过滤T1.X3 = '2018-02-01‘和T2.A3 = '2018-02-17’来获得如下所示的T3

代码语言:javascript
运行
复制
T3
customer_key X1    X2 
1000         60    10
1001         42    9
1005         15    1
1009         null null

我试着用下面的方法做完全的外连接

代码语言:javascript
运行
复制
create table T3
AS
select T1.customer_key, T3.customer_key, T1.X1, T1.X2
from T1
full outer join T2
on T1.Customer_key = T2.customer_key 
where T1.X3 = '2018-02-01' and T2.A3 = '2018-02-17'

它返回的行数少于满足where子句的记录总数。敬请指教

EN

Stack Overflow用户

发布于 2020-08-25 09:37:50

当您通过FULL OUTER JOIN联接表时,查询引擎将查找所有匹配的记录(INNER JOIN),并将两个表中任何不匹配的记录添加到JOIN结果集中。后者在另一个表的所有列中都有NULL

例如,T1中的customer = 1000将包含在JOIN结果中,尽管T2中没有这样的客户,但T2中的所有列都将为NULL (由于FULL OUTER)。然后,当您对这些记录应用WHERE子句时(WHERE是在JOIN操作之后执行的),您的结果集将排除customer = 1000,因为T2.A3 = '2018-02-17'将失败(因为T2.A3对于customer = 100NULL )。

我无法对您的问题提出疑问,因为您的解释缺少您试图实现的目标,并且我无法理解您的结果集:例如,为什么包含customer = 1000而不包含customer = 1002。请描述一下你想要实现的目标。

根据您试图完成的任务,您可以将WHERE子句的一部分移动到JOIN,或者使用像T1.customer is NULL / T1.customer is NOT NULL这样的过滤器来识别记录不匹配/不匹配的情况,并准确地过滤您需要的内容。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63570652

复制
相关文章

相似问题

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