一尘不染

太多的Left Joins代码有smell吗?

sql

例如,如果您在查询中有> 5个左联接,则是一个代码闻到有…

  • 您的设计有问题吗?
  • 您在一个查询中做得太多?
  • 你的数据库太规范化了吗?

阅读 122

收藏
2021-03-17

共1个答案

一尘不染

对于某些设计来说,这是一个完全合法的解决方案。

假设你有一个一对多的关系就像一个层次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(如果您只想弄清楚对应的记录在其他表中是否存在)。

有关性能的详细信息,请参见我的博客中的这篇文章:

2021-03-17