SQL一:
    SELECT        
       P.PK_PAYMENT_INST_ID,
       P.FOREIGN_ID,
       P.PAYMENT,
       P.PAYMENT_DATE,
       P.PAYMENT_NUMBER,
       P.FLAG,
       P.CONTRACT_ID,
       (
       select       
         C.Contract_Name
        from CMCCOA_PROJECT_CONTRACT C where C.PK_CONTRACT_INST_ID = P.CONTRACT_ID
       ) as Contract_Name
       
    FROM Cmccoa_project_Payment P SQL二:    
    SELECT        
       P.PK_PAYMENT_INST_ID,
       P.FOREIGN_ID,
       P.PAYMENT,
       P.PAYMENT_DATE,
       P.PAYMENT_NUMBER,
       P.FLAG,
       P.CONTRACT_ID,
       C.Contract_Name
    FROM Cmccoa_project_Payment P  left join CMCCOA_PROJECT_CONTRACT C on p.contract_id=C.PK_CONTRACT_INST_ID 以上两个都可以实现需要的查询,但是具体的区别(别说写法不同)是?和对效率的影响?
小生在plsql中算了一下时间都一样也(数据量不大)
望高手指点

解决方案 »

  1.   

    C.PK_CONTRACT_INST_ID = P.CONTRACT_ID 
    这个是不是走索引的?left join的效率会比较低,是两个表相连,然后取出特定的几个字段,关联的时候是两个表的所有字段都关联了
    第一个只是相当于一个子查询
      

  2.   

    SQL一:
    SELECT        
          P.ID, 
          P.A, 
          P.B, 
          P.C, 
          ( 
          select      
            C.AA
            from table2 C where C.FKID = P.ID 
          ) as D
          
        FROM table1 P SQL二:
    SELECT        
          P.ID, 
          P.A, 
          P.B, 
          P.C, 
          C.D
        FROM table1 P  left join table2 C on C.FKID = P.ID 简化一下纯这样呢?那个效率更高一些呢?
      

  3.   

    如果table2是个小表,用SQL一好,如果是个大表,用SQL二好。