select u.*
from 借书表 j
join 用户表 u on j.用户id=u.用户id
join 书表 s on j.书id=s.书id
where s.书名 in('aaa','bbb','ccc')
from 借书表 j
join 用户表 u on j.用户id=u.用户id
join 书表 s on j.书id=s.书id
where s.书名 in('aaa','bbb','ccc')
解决方案 »
- 在win2000下安装SQL2005提示下列错误: 着急啊!!!
- 查询的顺序问题
- 数据不按顺序插入怎么回事
- SQL SERVER 2008 在执行T-SQL时提示:当前命令发生了严重错误。应放弃任何可能产生的结果
- SqlBulkCopy导入mssql后,韩文字段乱码问题?
- 初学:一个基本的问题!!!!!!!!!!!!
- 日期转换
- SQL SERVER 2005:Integration Services的问题
- sqlserver数据库连接的问题,对于非菜鸟非常容易,对我非常不容易,救命啊!!!
- 在SQL7中,进行大量数据查询时(100万条), 如何优化?
- 救命:数据库误操作,如何恢复到上一步的状态
- 怎样将datetime类型转换成date类型
from 表1 a
join 表2 b on a.用户ID = b.用户ID
join 表2 c on a.书ID = c.书ID
WHERE c.书名 in ('aaa','bbb','ccc')
from 借书表 j
join 用户表 u on j.用户id=u.用户id
join 书表 s on j.书id=s.书id
where s.书名 in('aaa','bbb','ccc')
group by u.用户ID,u.用户名
having count(*)=3 --注意,这里是等3,即3本书,如果有4本书,要对应修改为4
declare @借书表 table (用户ID int,书ID int)
insert into @借书表
select 1,1
union all select 1,2
union all select 1,3
union all select 2,2
union all select 2,3declare @用户表 table (用户ID int,用户名 varchar(10))
insert into @用户表
select 1,'小张'
union all select 2,'小王'declare @书表 table(书ID int,书名 varchar(10))
insert into @书表
select 1,'aaa'
union all select 2,'bbb'
union all select 3,'ccc'--查询
select u.用户ID,u.用户名
from @借书表 j
join @用户表 u on j.用户id=u.用户id
join @书表 s on j.书id=s.书id
where s.书名 in('aaa','bbb','ccc')
group by u.用户ID,u.用户名
having count(*)=3/*--测试结果用户ID 用户名
----------- ----------
1 小张(所影响的行数为 1 行)
--*/
WHERE (书ID IN (SELECT 书ID FROM 借书表 GROUP BY 书ID HAVING COUNT(1) > 1))
(用户ID int, 书ID int)
insert 借书表 values( 1 , 1)
insert 借书表 values( 1 , 2)
insert 借书表 values( 1 , 3)
insert 借书表 values( 2 , 2)
insert 借书表 values( 2 , 3)
--insert 借书表 values( 2 , 1)go create table 用户表
(用户ID int , 用户名 char(10))
insert into 用户表 values( 1, '小张')
insert into 用户表 values(2 , '小王')go
create table 书表
(书ID int, 书名 char(10))
insert into 书表 values( 1,'aaa')
insert into 书表 values( 2, 'bbb')
insert into 书表 values( 3 ,'ccc')select a.* from 用户表 a
join 借书表 b on a.用户id=b.用户id
join 书表 c on b.书id=c.书id
where c.书名 in ('aaa' ,'bbb','ccc')
group by a.用户ID,a.用户名
having count(*)=3用户ID 用户名
----------- ----------
1 小张 (所影响的行数为 1 行)
上面的不好,有问题,当一个人借了两本 'aaa'时就出问题了
改成下面的就正确了create table 借书表
(用户ID int, 书ID int)
insert 借书表 values( 1 , 1)
-- insert 借书表 values( 1 , 2)
insert 借书表 values( 1 , 3)
insert 借书表 values( 2 , 2)
insert 借书表 values( 2 , 3)
insert 借书表 values( 2 , 1)
insert 借书表 values( 1 , 1)
insert 借书表 values( 1 , 1)go create table 用户表
(用户ID int , 用户名 char(10))
insert into 用户表 values( 1, '小张')
insert into 用户表 values(2 , '小王')go
create table 书表
(书ID int, 书名 char(10))
insert into 书表 values( 1,'aaa')
insert into 书表 values( 2, 'bbb')
insert into 书表 values( 3 ,'ccc')select a.* from 用户表 a
join (select distinct * from 借书表) b on a.用户id=b.用户id
join 书表 c on b.书id=c.书id
where c.书名 in ('aaa' ,'bbb','ccc')
group by a.用户ID,a.用户名
having count(*)=3数据如下:
用户ID 用户名
----------- ----------
2 小王 (所影响的行数为 1 行)
from 用户表
where exists (select 1
from 借书表
where 书ID = (select 书ID from 书表 where 书名 = 'aaa')
and 用户表.用户ID = 用户ID
)
and
exists (select 1
from 借书表
where 书ID = (select 书ID from 书表 where 书名 = 'bbb')
and 用户表.用户ID = 用户ID
)
and
exists (select 1
from 借书表
where 书ID = (select 书ID from 书表 where 书名 = 'ccc')
and 用户表.用户ID = 用户ID
)
from 用户表
where exists (select 1
from 借书表
where 书ID = (select 书ID from 书表 where 书名 = 'aaa')
and 用户表.用户ID = 用户ID
)
and
exists (select 1
from 借书表
where 书ID = (select 书ID from 书表 where 书名 = 'bbb')
and 用户表.用户ID = 用户ID
)
and
exists (select 1
from 借书表
where 书ID = (select 书ID from 书表 where 书名 = 'ccc')
and 用户表.用户ID = 用户ID
)
and
not exists (select 1
from 借书表
where 用户表.用户ID = 用户ID
and 书ID not in (select 书ID
from 书表
where 书名 in ('aaa','bbb','ccc')))