这句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

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus