我想设计一个查询,我想根据第一个表中的id从第二个表中获取名称。我可以使用以下两个查询获得结果。
请让我知道哪一个是有效的或给出快速结果以及为什么。
SELECT r1.id, c1.categoryName
FROM request r1
LEFT JOIN category c1
ON r1.categoryId = c1.id
order by r1.dateCreated DESC;
SELECT id, (SELECT categoryName FROM category WHERE id
= categoryId)
FROM request r1
order by dateCreated DESC;
答案 0 :(得分:0)
Normaly,显式连接是更快的方法,因为优化更好,但现在优化器一直在变好,所以你可以尝试使用更易读的SQL查询。
您可以在手册中找到它(13.2.10.11将子查询重写为连接):https://dev.mysql.com/doc/refman/5.7/en/rewriting-subqueries.html
它说“左[外]加入比同等子查询更快,因为服务器可能能够更好地优化它”。
但在复杂的情况下,我更喜欢子查询,它们具有更高的可读性,并且您的SQL将更易于维护,子查询是解决问题的逻辑上正确的方法。