mysql – (My)SQL如何评估链接的LEFT / INNER JOIN?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – (My)SQL如何评估链接的LEFT / INNER JOIN?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2014字,纯文字阅读大概需要3分钟。
内容图文
![mysql – (My)SQL如何评估链接的LEFT / INNER JOIN?](/upload/InfoBanner/zyjiaocheng/898/b73c6e5636ad4311913f7a408a789b88.jpg)
我们给出了3个表:
T1: T2: T3:
id | t3_id id | name id | t2_id
---------- --------- ----------
1 | 2 1 | abc 1 | 1
2 | NULL 2 | 123 2 | 1
3 | 1 3 | ab1 3 | 3
4 | 4 4 | 32b 4 | 2
现在我们测试了以下JOIN:
1:
SELECT
*
FROM T1
INNER JOIN T3 ON T1.t3_id = T3.id
INNER JOIN T2 ON T3.t2_id = T2.id
WHERE T2.name = '%'
这个案子很清楚.结果:
T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name
-----------------------------------------------------
1 | 2 | 2 | 1 | 1 | abc
3 | 1 | 1 | 1 | 1 | abc
4 | 4 | 4 | 2 | 2 | 123
2:
SELECT
*
FROM T1
LEFT JOIN T3 ON T1.t3_id = T3.id
LEFT JOIN T2 ON T3.t2_id = T2.id
WHERE T2.name = '%'
这一点也很清楚:
T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name
-----------------------------------------------------
1 | 2 | 2 | 1 | 1 | abc
2 | NULL | NULL | NULL | NULL | NULL
3 | 1 | 1 | 1 | 1 | abc
4 | 4 | 4 | 2 | 2 | 123
3:
SELECT
*
FROM T1
LEFT JOIN T3 ON T1.t3_id = T3.id
INNER JOIN T2 ON T3.t2_id = T2.id
WHERE T2.name = '%'
这个有点奇怪.结果(与第一个相同):
T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name
-----------------------------------------------------
1 | 2 | 2 | 1 | 1 | abc
3 | 1 | 1 | 1 | 1 | abc
4 | 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
内容总结
以上是互联网集市为您收集整理的mysql – (My)SQL如何评估链接的LEFT / INNER JOIN?全部内容,希望文章能够帮你解决mysql – (My)SQL如何评估链接的LEFT / INNER JOIN?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。