全国统一服务热线:400-633-9193

inner join 内联与left join 左联的实例代码

    网络     2017-10-18    1464

今天老板把我叫过去,给我分析了一下我写的存储过程【捂脸羞愧中。。。】,因为又临时加了个需求需要关联另外一个视图,我写成了内联,所以读取出来的数据少了好多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
select t1.MOTCARRIERNAME
   ,t2.ROUTENAME
   ,y.BUSLICENSE
   ,y.ACCTPRICE
   ,y.PRICE
   ,y.CANACCTPRICE
   ,y.CENTERACCTPRICE
   ,y.OTHERACCTPRICE
   ,y.STAACCTPRICE
   ,y.TKAMOUNT
   ,y.SCHBILLID
   ,m.ManualTicketsStationFee
   ,m.ManualTicketsFee
  from
  (Select b.MOTCARRIERID
   ,b.ROUTEID
   ,b.BUSLICENSE
   ,a.SCHBILLID
   ,a.ACCTPRICE
   ,a.CANACCTPRICE
   ,a.CENTERACCTPRICE
   ,a.OTHERACCTPRICE
   ,a.PRICE
   ,a.STAACCTPRICE
   ,a.TKAMOUNT
   From history.TKSCHBILLHISTORY a
   ,history.TKSERIALSCHHISTORY b
   ,history.TKCARRYSTASCHHISTORY c
   Where a.Drvdate between @pStartDate and @pEndDate
    and a.SchBillStatusId=1
    and b.SchId=a.SchId
    and b.Drvdate=a.Drvdate
    and a.schid=c.schid
    and a.DRVDATE=c.DRVDATE
  )y
  ,baseinfo.MOTORCARRIER t1
  ,baseinfo.ROUTE t2
  ,Settlement.dbo.View_ManualTicket m
  where t1.MOTCARRIERID=y.MOTCARRIERID and t2.ROUTEID =y.ROUTEID and m.BusLicense=y.BUSLICENSE
  order by t1.MOTCARRIERNAME,t2.ROUTENAME,y.BUSLICENSE

这种关联叫做内联,表A,表B where A.Id=B.Id,只有表A,表B里都有这个ID,这条数据才会被显示出来。但是我的项目中需要的是以表A为主表,只要表A中有的数据都要显示出来,表B中有与表A相关的数据就显示,没有则置为空。

即A left join B on A.Id=B.Id


  分享到:  
1.4548s