我有4个表:Table1,Table2,Table3,Table4每个都是前面的一个细节,例如table4是table3的详细信息,依此类推 . 这是我的架构:
表格1:
PK1 Integer,
Name1 varchar(15),...
表2:
PK2 Integer,
PK1 Integer, -- This is foreign key to Table1.PK1
Name2 varchar(15),...
表3:
PK3 Integer,
PK2 Integer, -- This is foreign key to Table2.PK2
Name3 varchar(15),...
表4:
PK4 Integer,
PK3 Integer, -- This is foreign key to Table3.PK3
Name4 varchar(15),...
我现在需要根据Table4中的某个值选择Table1中的记录,例如当Table4.PK4 = 3时 .
所以我试着这样:
Select * from table1 where PK1 in (
select PK1 from Table2 where PK2 in (
select PK2 from Table3 where PK3 in (
select PK3 from Table4 where PK4 = 3
)))
我得到了正确的结果,但它是最好的/优化的方式还是我应该使用更好的SQL?
2 回答
为什么不使用所有连接:
我认为查询引擎应该足够智能以优化您的查询,但至少从可读性的角度来看,我上面提供的那个更易读
我认为这比其他答案有效 . 你首先做加入,这可能不会太重要,因为我很确定他的 table 不是那么大 . 但是对于大数据我认为最好将where子句放在连接的ON条件中