中国教程网《Photoshop专家讲堂》光盘热售参与论坛活动,快速赚取金币精品素材,中英文字体
发新话题
打印

这句SQL该怎么写?

这句SQL该怎么写?


SELECT  class.class,COUNT(*)  AS  人数   
from  a  INNER  JOIN  b  ON  a.会员证号=b.PID  
???  
b  LEFT  OUT  JOIN  class  ON  LEFT(b.job,CHARINDEX(''/'',b.job,1)-1)=class.job  
where  a.病种分类  like  %cbb.text%      
GROUP  BY  class.class  

涉及三张表  a  b  class        a.会员证号  和b.PID在各自的表中都是unique的  
class有两个字段  job不重复  class有重复  
LEFT(b.job,CHARINDEX(''/'',b.job,1)-1)  是取b.job中的一段  
不懂的是三张表的时候  几个JOIN如何联合起来用  就是上面???的地方  该怎么联到一块  


---------------------------------------------------------------  

SELECT  c.class,COUNT(*)  AS  人数   
from  a  JOIN  b  ON  a.会员证号=b.PID  
             JOIN  class  c  ON  LEFT(b.job,CHARINDEX(''/'',b.job,1)-1)=c.job  
where  a.病种分类  like  %cbb.text%      
GROUP  BY  c.class  

---------------------------------------------------------------  

inner  join是从后面一张表里面提取满足条件的纪录  
left  outer  join  是第一个表中所有满足where  子句的条件的记录都返回,而无论是否在第二个表中能找到匹配的纪录  
right  outer  join  和left  outer  join完全相同,不同的是来自右边的表的所有记录都返回  
---------------------------------------------------------------  

把下面代码运行一把就知道各个连接的区别了  

create  table  test_a  (a  int,  b  int)  
go  
create  table  test_b  (a  int,  b  int)  
go  
insert  test_a  values  (1,1)  
insert  test_a  values  (2,1)  
insert  test_a  values  (3,1)  
go  
insert  test_b  values  (4,1)  
insert  test_b  values  (2,1)  
insert  test_b  values  (3,1)  
go  
select  test_a.*  ,test_b.*  from  test_a  left  join  test_b  on  test_a.a=test_b.a  
select  test_a.*  ,test_b.*  from  test_a  right  join  test_b  on  test_a.a=test_b.a  
select  test_a.*  ,test_b.*  from  test_a  inner  join  test_b  on  test_a.a=test_b.a  
select  test_a.*  ,test_b.*  from  test_a  full  join  test_b  on  test_a.a=test_b.a

TOP

发新话题