我现在有一张主表,几张子表:
主表A,子表B,C,D,E;
A与E之间是一对多关系,A与B之间是一对多关系,B与C之间,C与D之间,也是一对多的关系;要实现通过A的主键查询,SQL要怎么写。

解决方案 »

  1.   


    这个你要什么数据呢,我想要的结果就是select查询出A B c d四个表的数据
    这个是我写的一个SQL 根据A表的ID 查询数据
    select * from (select MP.OUTAGE_PLAN_ID,DP.OUTAGE_DEPT_ID,RA.OUTAGE_RANGE_ID,LI.OUTAGE_LINE_ID,
    LI.SUBSTATION_ID,LI.SUBSTATION_NAME,LI.SUBSTATION_VOLTAGE,LI.LINE_NAME,LI.LINE_ID,
    LI.LINE_VOLTAGE,LI.DEPT_NAME,LI.DEPT_CODE,LI.DEPT_ID,LI.IS_TURN,LI.IS_OUTAGE from 
    INTEGRATED_OUTAGE_MONTHPLAN MP --A
    left join INTEGRATED_OUTAGE_DEPT DP on MP.OUTAGE_PLAN_ID=DP.OUTAGE_PLAN_ID --B
    left join INTEGRATED_OUTAGE_RANGE RA on RA.OUTAGE_DEPT_ID=DP.OUTAGE_DEPT_ID --c
    left join INTEGRATED_OUTAGE_LINE LI on LI.OUTAGE_RANGE_ID=RA.OUTAGE_RANGE_ID --d
    ) p
    where p.OUTAGE_PLAN_ID = 330845;
      

  2.   

    select MP.OUTAGE_PLAN_ID,
           DP.OUTAGE_DEPT_ID,
           RA.OUTAGE_RANGE_ID,
           LI.OUTAGE_LINE_ID,
           LI.SUBSTATION_ID,
           LI.SUBSTATION_NAME,
           LI.SUBSTATION_VOLTAGE,
           LI.LINE_NAME,
           LI.LINE_ID,
           LI.LINE_VOLTAGE,
           LI.DEPT_NAME,
           LI.DEPT_CODE,
           LI.DEPT_ID,
           LI.IS_TURN,
           LI.IS_OUTAGE
      from INTEGRATED_OUTAGE_MONTHPLAN MP,
           INTEGRATED_OUTAGE_DEPT      DP,
           INTEGRATED_OUTAGE_RANGE     RA,
           INTEGRATED_OUTAGE_LINE      LI
     where mp.OUTAGE_PLAN_ID = '330845'
       and mp.OUTAGE_PLAN_ID = DP.OUTAGE_PLAN_ID
       and dp.OUTAGE_DEPT_ID = RA.OUTAGE_DEPT_ID
       and RA.OUTAGE_RANGE_ID = LI.OUTAGE_RANGE_ID
      

  3.   

    建立多个表别名 即可达到所想要的进行 A对B 内联或者左连 B对C的左连 如果连接有误会造成笛卡尔积错误,具体需求具体分析
      

  4.   

    建议将where语句用到每张表中可以提高效率,建议你看一下SQL语句的优先级 
      

  5.   

    这样写效率很低建议 跟inner left right结合