關於A left join B,A是否一定是主表?


 

一般情況,我們作左連接 select * from A left join B  on A.id=B.a_id;一定認為A就是主表,其實還有另外的情況,我們若將sql改寫成 select * from A left join B  on on A.id=B.a_id where B.id<cont(常數)。此時B表就作為連接的主表了。具體示例見下:

新建表 A

 

新建表B

 1.查詢sql

SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<8;此時查看查詢計划,顯示 b表為主表

 

解釋:where v.id<8,篩選出了更小的表B,所以按照left join 小表驅動大表的原則,此時把B表作為主表也不足為奇了。

 

 

 2.查詢sql

SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<16;此時查看查詢計划,顯示 a表為主表

 

解釋:where v.id<16,篩選出了的表B有15條>A(里面14條),所以按照left join 小表驅動大表的原則,此時把A表作為主表了。

 

 

 3.查詢sql

 

1)SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<14;此時查看查詢計划,顯示 a表為主表

 

 

2)SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<=14;此時查看查詢計划,顯示 a表為主表

 

按照我們前面說的小表驅動大表,此時where where b.id<14或者 where where b.id<=14,B表的條數為13或14(A表14條沒變),但此時都是以A 。

說明:在2表的連接時候相等記錄條數時候有點小bug,具體原因待解決。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM