根据第4个详细信息表中的条件从主表中选择记录

时间:2015-09-20 11:45:59

标签: sql firebird

我有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?

1 个答案:

答案 0 :(得分:2)

我认为这比其他答案有效。 你首先做的是加入,因为我很确定他的桌子不是那么大,所以这可能会非常重要。但是对于大数据我认为最好将where子句置于连接的ON条件

App