首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用交叉引用表混合左和右连接

如何使用交叉引用表混合左和右连接
EN

Stack Overflow用户
提问于 2020-07-26 22:53:21
回答 1查看 82关注 0票数 0

我使用的是Mysql。

我有表A(ida)和表B(idb),还有一个交叉引用表CR(ida, idb)

我想要在查询中捕获AB之间的关系(基本上是CR),但我还想要AB中在CR中没有关系的所有行。要得到这样的东西:

代码语言:javascript
复制
ida | idb
=========
 X  | nul
 Y  |  1 
nul |  2 

我试过这个:

代码语言:javascript
复制
select * from
A
left join CR on (...)
right join B on (...)

通过这种方式,我可以从B获取所有行,但不是所有行都来自A

如果我执行A left join CR left join B,我会从A获得所有内容,但不是全部从B获得。这是意料之中的。但我不明白为什么在前一种情况下right join会模糊left join。我还使用了大括号来尝试在连接中强制一些优先级,但结果是相同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-26 23:20:23

连接从左到右进行计算。查询的操作顺序就像使用了如下所示的括号:

代码语言:javascript
复制
(A LEFT JOIN CR) RIGHT JOIN B

因此,它必然会返回B中的所有行。

但它只返回来自(A LEFT JOIN CR)的匹配行。连接的这一部分将包括来自A的所有行,但根据后续右连接的连接条件,可能会排除其中一些A行。

从你的描述来看,听起来你真的很想要一个FULL OUTER JOIN。MySQL不支持此类型的外部联接。有几种方法可以通过使用两个连接的联合来模拟它:

代码语言:javascript
复制
...
A LEFT OUTER JOIN B
UNION
A RIGHT OUTER JOIN B
...

The feature request of MySQL to support FULL OUTER JOIN是在2006年提交的。如果你需要这个,你应该登录到bug跟踪器,并在该功能请求上单击“影响我”。

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

https://stackoverflow.com/questions/63101769

复制
相关文章

相似问题

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