SELECT
e.name,
e.id,
ew.*,
w.*
FROM
enterprise e
LEFT JOIN enterprise_webapp ew
ON e.id = ew.enterprise_id
LEFT JOIN webapp w
ON ew.webapp_id = w.id
这条sql语句中的e表左连接ew表,而ew表又左连接w表,本人想问一下,数据库引擎是怎么样执行这条sql语句的,先执行哪个左连接
e.name,
e.id,
ew.*,
w.*
FROM
enterprise e
LEFT JOIN enterprise_webapp ew
ON e.id = ew.enterprise_id
LEFT JOIN webapp w
ON ew.webapp_id = w.id
这条sql语句中的e表左连接ew表,而ew表又左连接w表,本人想问一下,数据库引擎是怎么样执行这条sql语句的,先执行哪个左连接
解决方案
5
FROM
enterprise e
LEFT JOIN enterprise_webapp ew
ON e.id = ew.enterprise_id
LEFT JOIN webapp w
ON ew.webapp_id = w.id
这个先执行哪个,不一定的,你可以看看执行计划:
explain SELECT
e.name,
e.id,
ew.*,
w.*
FROM
enterprise e
LEFT JOIN enterprise_webapp ew
ON e.id = ew.enterprise_id
LEFT JOIN webapp w
ON ew.webapp_id = w.id
enterprise e
LEFT JOIN enterprise_webapp ew
ON e.id = ew.enterprise_id
LEFT JOIN webapp w
ON ew.webapp_id = w.id
这个先执行哪个,不一定的,你可以看看执行计划:
explain SELECT
e.name,
e.id,
ew.*,
w.*
FROM
enterprise e
LEFT JOIN enterprise_webapp ew
ON e.id = ew.enterprise_id
LEFT JOIN webapp w
ON ew.webapp_id = w.id
10
你的理解有问题,两个left join 的时候,第一个left join 会生成一个虚拟表,然后 虚拟表 left join 第三个表 在去查询
5
先连接前面两个,然后前面两个的集连接第三个