首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

表连接解决方法

2012-02-23 
表连接表1表2NOBOOKBOOKAUTHOR125b12b01wang125b13b12lib13b13li124b12b42zhao124b12b65zhao123b65122b421

表连接
表1                                               表2  
NO         BOOK                             BOOK         AUTHOR
125         b12                             b01               wang
125         b13                             b12               li
              b13                             b13               li
124         b12                             b42               zhao
124         b12                             b65               zhao
123         b65
122         b42
122         b01

如上为图书馆例子,NO为学号   ,要找出所有读了li   写的“所有”的书的学生学号。如上即为从表1   里选出   125
怎么办啊??   我只会建个临时的view   再从里面挑
最好解释下阿,谢谢!!

[解决办法]
if object_id( 'pubs..A ') is not null
drop table A
go
create table A(NO varchar(10),BOOK varchar(10))
insert into A(NO,BOOK) values( '125 ', 'b12 ')
insert into A(NO,BOOK) values( '125 ', 'b13 ')
insert into A(NO,BOOK) values( '124 ', 'b12 ')
insert into A(NO,BOOK) values( '124 ', 'b12 ')
insert into A(NO,BOOK) values( '123 ', 'b65 ')
insert into A(NO,BOOK) values( '122 ', 'b42 ')
insert into A(NO,BOOK) values( '122 ', 'b01 ')
go

if object_id( 'pubs..B ') is not null
drop table B
go
create table B(BOOK varchar(10),AUTHOR varchar(10))
insert into B(BOOK,AUTHOR) values( 'b01 ', 'wang ')
insert into B(BOOK,AUTHOR) values( 'b12 ', 'li ')
insert into B(BOOK,AUTHOR) values( 'b13 ', 'li ')
insert into B(BOOK,AUTHOR) values( 'b42 ', 'zhao ')
insert into B(BOOK,AUTHOR) values( 'b65 ', 'zhao ')
go

declare @AUTHOR as varchar(10)
set @author = 'li '

select no from
(
select distinct * from
(
select * from A where book in (select book from B where author = @author)
) t
) m
group by no having count(*) = (select count(*) from B where author = @author)

drop table A,B

/*
no
----------
125

(所影响的行数为 1 行)

*/

热点排行