想象你有三张桌子:
1-现在这两个连接查询之间有任何区别(性能,可读性等):
select * from target_tb
inner join (
select * from other_tb where some_col_deleted = false
) other_tb on target_tb.other_tb_id = other_tb.id
inner join other_tb2 on other_tb.other_tb2.id = other_tb2.
select * from target_tb
inner join (
select * from other_tb
inner join other_tb2 on other_tb.other_tb2.id = other_tb2.id where some_col_deleted = false
) other_tb on target_tb.other_tb_id = other_tb.id
2-如果我将where
子句放在内连接之外,我也有这个问题,它有什么不同吗?
答案 0 :(得分:0)
您通常会将这些查询编写为:
select . . .
from target_tb t inner join
other_tb o
on t.other_tb_id = o.id inner join
other_tb2 o2
on o2.other_tb2.id = o2.?
where o.some_col_deleted = false;
不同版本的性能在不同的数据库中应该非常相似。运行查询的一部分是优化阶段。
请注意,表别名使查询更易于编写和阅读。