首页 文章

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

提问于
浏览
0

我有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 回答

  • 2

    为什么不使用所有连接:

    Select DISTINCT table1.* 
    from table1 
        INNER JOIN table2 ON table1.PK1 = table2.PK1 
        INNER JOIN table3 ON table2.PK2 = table3.PK2 
        INNER JOIN table4 ON table3.PK3 = table4.PK3
    WHERE table4.PK4 = 3
    

    我认为查询引擎应该足够智能以优化您的查询,但至少从可读性的角度来看,我上面提供的那个更易读

  • 2

    我认为这比其他答案有效 . 你首先做加入,这可能不会太重要,因为我很确定他的 table 不是那么大 . 但是对于大数据我认为最好将where子句放在连接的ON条件中

    Select DISTINCT table1.* 
    from table4
    INNER JOIN table3 ON (table4.PK3 = table3.PK3 AND table4.PK4=3) 
    INNER JOIN table2 ON table2.PK2 = table3.PK2 
    INNER JOIN table1 ON table2.PK1 = table1.PK1
    

相关问题