一道练习题就是查询跟蒋雯丽选了同样书的人的姓名,书名还有借书日期
不知道我的代码哪里错了 就是蒋雯丽没有选海贼王 也会查出来
想不通 大家帮我分析下
不知道我的代码哪里错了 就是蒋雯丽没有选海贼王 也会查出来
想不通 大家帮我分析下
解决方案 »
- 求mssql高效的插入方法
- 打算把所有索引重建一次,应该用什么语句来处理啊?请前辈指点!
- 还是视图
- 哎...这个语句谁给优化一下啊...
- 使用级联删除的疑惑,请教有经验的大哥大姐
- 请教个行列转换问题,谢谢
- 大家进来帮帮我吧,很容易的题目
- 如何在WindowsServer2000的服务器上实现双服务器随时存取SQLSERVER2000的同一数据库
- SQL Server中image型数据如何显示在VB的Image控件里,我用ADO连接SQLServer,用image or pictureBox绑定ado,datafield设为哪个image字段,但是总说我bind失败,不知有那为大虾能帮忙解决
- 我的win2000上装的sql2000莫名的不能用了,是谁的问题?这两搭配是不是危险呢?
- SQL问题,表关联及子编号
- 数据中数据是这样保存,怎么通过sql实现下面样式的统计表?
另外楼主的语句没有搜索出来蒋雯丽相关数据啊
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([姓名] nvarchar(23),[书名] nvarchar(24))
Insert #T
select N'张三',N'三国演义' union all
select N'蒋雯丽',N'三国演义' union all
select N'李四',N'海贼王'
Go
--测试数据结束
SELECT *
FROM #T a
WHERE EXISTS (SELECT * FROM #T b WHERE a.书名 = b.书名 AND b.姓名 = '蒋雯丽')
AND a.姓名 <> '蒋雯丽'
select '120101' as 借书证号,'蒋雯丽' as 姓名,'计算机系' as 系名,'12-1' as 班级
union all
select '120102','刘昌伟','计算机系','12-1'
union all
select '120103','宋美娜','计算机系','12-1'
union all
select '220101','杰弗森','英语系','22-1'
union all
select '220102','内丹','英语系','22-1'
union all
select '220103','刘东升','英语系','22-1'
union all
select '120104','赵日天','计算机系','12-2'
),loans as (
select '120101' as 借书证号,'y100' as 图书馆登记号,getdate() as 借书日期
union all
select '120101','y102',getdate()
union all
select '120101','y103',getdate()
union all
select '120101','y104',getdate()
union all
select '120101','y105',getdate()
union all
select '120103','y104',getdate()
union all
select '120104','y103',getdate()
union all
select '220102','y101',getdate()
union all
select '220101','y104',getdate()
),books as (
select 'tp311' as 索书号,'数据库系统' as 书名,'黎明' as 作者,'y100' as 图书馆登记号
union all
select 'tp312','海贼王','黎明','y101'
union all
select 'tp313','西游记','黎明','y102'
union all
select 'tp314','三国演义','黎明','y103'
union all
select 'tp315','三体','黎明','y104'
union all
select 'tp316','镜花缘','黎明','y105'
)
select 姓名,书名
from loans l
inner join borrower u on l.借书证号=u.借书证号
inner join books b on b.图书馆登记号=l.图书馆登记号
where l.图书馆登记号 in (
select 图书馆登记号
from loans
where 借书证号=(
select 借书证号
from borrower
where 姓名='蒋雯丽'
)
)
and 姓名<>'蒋雯丽'直接就没用exists
from loans l
inner join borrower u on l.借书证号=u.借书证号
inner join books b on b.图书馆登记号=l.图书馆登记号
where exists(
select top 1 1 from loans x
inner join borrower y on x.借书证号=y.借书证号
where 姓名='蒋雯丽' and x.图书馆登记号=l.图书馆登记号
)
and 姓名<>'蒋雯丽'修改成exists了