当前位置 : 主页 > 网络编程 > 其它编程 >

mysql–(My)SQL如何评估链接的LEFT/INNERJOIN

来源:互联网 收集:自由互联 发布时间:2023-07-02
我们给出了3个表:T1:T2:T3:id|t3_idid|nameid|t2_id-----------------------------1|21|abc1|12|NULL2|1 我们给出了3个表: T1: T2: T3:id | t3_id id | name id | t2_id---------- --------- ----------1 | 2 1 | abc 1 | 12 | NULL 2 | 123
我们给出了3个表:T1:T2:T3:id|t3_idid|nameid|t2_id-----------------------------1|21|abc1|12|NULL2|1

我们给出了3个表:

T1: T2: T3:id | t3_id id | name id | t2_id---------- --------- ----------1 | 2 1 | abc 1 | 12 | NULL 2 | 123 2 | 13 | 1 3 | ab1 3 | 34 | 4 4 | 32b 4 | 2

现在我们测试了以下JOIN:

1:

SELECT *FROM T1INNER JOIN T3 ON T1.t3_id = T3.idINNER JOIN T2 ON T3.t2_id = T2.idWHERE T2.name = '%'

这个案子很清楚.结果:

T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name-----------------------------------------------------1 | 2 | 2 | 1 | 1 | abc3 | 1 | 1 | 1 | 1 | abc4 | 4 | 4 | 2 | 2 | 123

2:

SELECT *FROM T1LEFT JOIN T3 ON T1.t3_id = T3.idLEFT JOIN T2 ON T3.t2_id = T2.idWHERE T2.name = '%'

这一点也很清楚:

T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name-----------------------------------------------------1 | 2 | 2 | 1 | 1 | abc2 | NULL | NULL | NULL | NULL | NULL3 | 1 | 1 | 1 | 1 | abc4 | 4 | 4 | 2 | 2 | 123

3:

SELECT *FROM T1LEFT JOIN T3 ON T1.t3_id = T3.idINNER JOIN T2 ON T3.t2_id = T2.idWHERE T2.name = '%'

这个有点奇怪.结果(与第一个相同):

T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name-----------------------------------------------------1 | 2 | 2 | 1 | 1 | abc3 | 1 | 1 | 1 | 1 | abc4 | 4 | 4 | 2 | 2 | 123

我不明白MySQL如何评估这个表达式.为什么它忽略LEFT JOIN并且似乎更喜欢INNER JOIN.

如果我读这个查询就像:

>从T1获取数据>通过LEFT JOIN从T2获取数据(表示:仅在可能的情况下,否则采用NULL数据)>通过INNER JOIN从T3获取数据(意味着:删除所有无法通过此INNER JOIN连接的T2数据)

但似乎我必须向后阅读查询?!

有人可以向我解释这个场景吗?

解决方法:

左连接类似于“OR”,INNER JOIN类似于“AND”.所以有这样的优先权

t1 left join (t2 inner join t3)

这与…有很大的不同

(t1 left join t2) inner join t2

上一篇:微信聊天语音通话记录怎么获
下一篇:没有了
网友评论