Ryu*_*Ryu 33 sql sql-server-2005 left-join
例如,如果您在查询中有> 5个左连接是代码味道有...
Qua*_*noi 38
对于某些设计来说,它是完全合法的解决方案.
假设您有一对多关系的层次结构,如Customer- Order- Basket- Item- Price等,可以在任何级别上填充:a Customer可能没有Orders,a 可能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
…
Run Code Online (Sandbox Code Playgroud)
请注意,在某些情况下它可能效率低下,并且可能会被替换为EXISTS或NOT EXISTS(如果您只想知道相应的记录存在或在其他表中不存在).
有关性能详情,请参阅我的博客中的这篇文章
LEFT JOIN的有NOT EXISTSann*_*ata 12
从某种意义上说,你可以/应该调查我会说是的.通过考虑一些观点,你可能会获得更好的效用和维护.
从某种意义上来说,它是"坏代码"否,这很容易合理,特别是对于大型数据库而言,现代数据库可能会优化任何低效率.
不管怎么说都没关系,但是如果你发现自己一遍又一遍地使用相同的连接来编写相同的查询/过程,那么它可能是创建视图的候选者,只是为了简化你将来的查询,以及如果您进行架构更改,请减少需要更改的触摸点数量
| 归档时间: |
|
| 查看次数: |
8461 次 |
| 最近记录: |