【问题标题】:Adding strictly business logic predicates to the LEFT JOIN conditions将严格的业务逻辑谓词添加到 LEFT JOIN 条件
【发布时间】:2011-05-18 19:22:51
【问题描述】:

这是征求意见的理论/最佳实践请求。

我已经习惯于将 WHERE 子句和 JOIN 条件视为“托管”任何业务逻辑的好地方,这将使我的查询尽可能精确。

但我注意到,将不相关的业务逻辑添加为 JOIN 条件可能违反“最佳实践”。例如:

         SELECT a.Id, b.Id
           FROM foo AS a 
LEFT OUTER JOIN bar AS b ON a.Id = b.Id 
                        AND GETDATE() >= "18/5/2011"

这个例子有点幼稚:在现实生活中,调用者确实需要附加条件,而没有它实际上会产生不真实的结果(调用者必须在代码中过滤)。

请注意,对于 OUTER 连接,当逻辑要求它时,不能将条件放在 WHERE 子句中。

【问题讨论】:

    标签: sql outer-join


    【解决方案1】:

    出于这个原因,我一直将尽可能多的条件句放入JOIN 语句中,并且在许多地方(包括 Joe Celko 的著作)中阅读过,这是一种最佳做法。

    JOIN 条件将更快,因为它们完全排除了将行添加到组合表中,其中在根据连接条件组合表之后使用 WHERE 子句 - 并且可能会使用更大的数据集。在许多情况下,我确信优化器会智能地处理此问题并尽可能应用 WHERE 条件,但这是推测,充其量只能是特定于引擎的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      相关资源
      最近更新 更多