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

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

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

    假设您具有一对多关系的层次结构,例如Customer-Order-Basket-Item-Price等,可以在任何级别上填充:Customer可能没有OrdersOrder可能没有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
    …
    

    请注意,在某些情况下它可能效率不高,并且可以用EXISTSNOT EXISTS替换(如果您只想弄清楚相应的记录在其他表中存在或不存在)。

    有关性能的详细信息,请参见我的博客中的这篇文章:
  • Finding incomplete orders-如何从LEFT JOIN替换NOT EXISTS中受益
  • 关于sql - 太多的Left Joins代码气味?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/793647/

    10-14 12:52