例如,如果您在查询中有> 5个左联接,则是一个代码闻到有...
最佳答案
对于某些设计来说,这是一个完全合法的解决方案。
假设您具有一对多关系的层次结构,例如Customer
-Order
-Basket
-Item
-Price
等,可以在任何级别上填充:Customer
可能没有Orders
,Order
可能没有Baskets
等
在这种情况下,您发出如下内容:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
请注意,在某些情况下它可能效率不高,并且可以用
EXISTS
或NOT EXISTS
替换(如果您只想弄清楚相应的记录在其他表中存在或不存在)。有关性能的详细信息,请参见我的博客中的这篇文章:
LEFT JOIN
替换NOT EXISTS
中受益关于sql - 太多的Left Joins代码气味?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/793647/