我在两个以上的表上应用连接,下面是where子句的一部分。 以下两个是更好的写作方式,为什么??
where
d.bu_id = 'ABC'
and
hd.bu_id = 'ABC'
and
s.bu_id = 'ABC'
OR
where
d.bu_id = 'ABC'
and
hd.bu_id = d.bu_id
and
s.bu_id = d.bu_id
答案 0 :(得分:2)
最佳解决方案实际上取决于您预期的变更模式。如果所有三个都是相同的,因为它们确实引用了同一个实体,那么它们似乎更有可能一起变化。在这种情况下,您希望选择第二种选择,以免重复自己。
如果它们碰巧具有相同的价值,那么它们中的一个将来会更加独立地发生变化,因此您可以通过将其保留为第一种形式来节省自己的麻烦。
如果您对性能感到疑惑,那么就没有什么区别,因为任何查询优化器都应该能够将它们都计算出来。
答案 1 :(得分:1)
我认为最好的解决方案是声明一个变量来保存您要查找的bu_id
,然后join
hd
,s
和d
在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