日期:2014-05-16  浏览次数:20927 次

请教一个关于sql左连接的效率问题
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中算了一下时间都一样也(数据量不大)
望高手指点

------解决方案--------------------
C.PK_CONTRACT_INST_ID = P.CONTRACT_ID 
这个是不是走索引的?

left join的效率会比较低,是两个表相连,然后取出特定的几个字段,关联的时候是两个表的所有字段都关联了
第一个只是相当于一个子查询
------解决方案--------------------
如果table2是个小表,用SQL一好,如果是个大表,用SQL二好。
------解决方案--------------------
引用楼主 snakeaiyu 的帖子:
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 …