0

我在两个以上的表上应用连接,下面是 where 子句的一部分。在以下两个中,哪个是更好的编写方式,为什么?

where
    d.bu_id     =   'ABC'
and
    hd.bu_id    =   'ABC'
and 
    s.bu_id     =   'ABC'

或者

where
    d.bu_id     =   'ABC'
and
    hd.bu_id    =   d.bu_id
and 
    s.bu_id     =   d.bu_id
4

2 回答 2

2

最佳解决方案实际上取决于您预期的更改模式。如果这三个都是相同的,因为它们确实指的是同一个实体,那么它们似乎更有可能一起改变。在这种情况下,你会想要选择第二个选项来避免重复自己。

如果它们恰好具有相同的值,则它们中的一个更有可能在将来独立更改,因此您可以通过将其保持在第一种形式来省去麻烦。

如果您想知道性能,没有太大区别,因为任何查询优化器都应该能够解决这两个问题。

于 2013-11-01T19:50:37.700 回答
1

我认为最好的解决方案是声明一个变量来保存bu_id你正在寻找的,然后join hd,,sd一起bu_id。如果有必要,这将允许您bu_id在一个位置进行更改。在字段上添加索引bu_id应确保良好的性能。

DECLARE @bu_id CHAR(3) = 'ABC'

SELECT
    *
FROM
    table_d d
    INNER JOIN table_hd hd on hd.bu_id = d.bu_id
    INNER JOIN table_s s on s.bu_id = d.bu_id
WHERE
    d.bu_id = @bu_id
于 2013-11-01T20:29:31.993 回答