数据库中一个表是多个图书馆的书记录,字段A为图书馆名,字段B为书名,怎么判断图书馆甲和乙有相同的书?

yyk7248 2017-09-14 03:37:32
数据库中的一个表是多个图书馆书的记录,字段A为图书馆名,字段B为书名,怎么判断图书馆甲和图书馆乙具有相同的书(书的数量和书名完全一样)?
...全文
689 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2017-09-15
  • 打赏
  • 举报
回复

slect B
from
(select distinct B FROM TABLE WHERE A='甲'
union all
select distinct B FROM TABLE WHERE A='乙') as a
group by B
having count(*)=1
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
在mysql中实测,如下方法通过: SELECT count(*) FROM (SELECT * from(SELECT * from (select 书名 as w from tt where 图书馆名='甲')a left join ( select 书名 as t from tt where 图书馆名='乙')b on a.w=b.t union SELECT * from (select 书名 as w from tt where 图书馆名='甲')c right join ( select 书名 as t from tt where 图书馆名='乙')d on c.w=d.t)mm WHERE w IS NULL OR t IS NULL)pp
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
引用 14 楼 zbdzjx 的回复:
试试这个:
with t1(序号, 图书馆名, 书名) as
(
select 1, '甲', '111' union all
select 2, '甲', '222' union all
select 3, '乙', '111' union all
select 4, '乙', '222'
)
select case when COUNT(*)=0 then '是' else '否' end from 
(select * from t1 where 图书馆名='甲') a
full join
(select * from t1 where 图书馆名='乙') b
on a.书名=b.书名
where a.序号 is null or b.序号 is null
感谢回答,谢谢!
二月十六 2017-09-14
  • 打赏
  • 举报
回复
mysql……如果是mysql上边的答案基本都不能用了,都是mssql的,试试这个,没测试。
SELECT    *
              FROM      ( SELECT    t1.A AS t1A ,
                                    t2.A AS t2A
                          FROM      表 t1
                                    left JOIN 表 t2 ON t1.B = t2.B
                          WHERE     t1.A = '甲'
                                    AND t2.A = '乙'
                       union
SELECT    t1.A AS t1A ,
                                    t2.A AS t2A
                          FROM      表 t1
                                    left JOIN 表 t2 ON t1.B = t2.B
                          WHERE     t1.A = '乙'
                                    AND t2.A = '甲'
                        ) t
              WHERE     t.t1A IS NULL
                        OR t.t2A IS NULL
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
试试这样:
IF ( EXISTS ( SELECT    *
              FROM      ( SELECT    t1.A AS t1A ,
                                    t2.A AS t2A
                          FROM      表 t1
                                    FULL JOIN 表 t2 ON t1.B = t2.B
                          WHERE     t1.A = '甲'
                                    AND t2.A = '乙'
                        ) t
              WHERE     t.t1A IS NULL
                        OR t.t2A IS NULL ) )
    BEGIN
        PRINT '不完成相同'
    END
ELSE
    BEGIN
        PRINT '完成相同'
    END
明白您的意思了,这个方法是正确的,如果不用FULL JOIN 还有没有其它的办法呢, 我用mysql 没有FULL JOIN 啊。。。。
zbdzjx 2017-09-14
  • 打赏
  • 举报
回复
试试这个:
with t1(序号, 图书馆名, 书名) as
(
select 1, '甲', '111' union all
select 2, '甲', '222' union all
select 3, '乙', '111' union all
select 4, '乙', '222'
)
select case when COUNT(*)=0 then '是' else '否' end from 
(select * from t1 where 图书馆名='甲') a
full join
(select * from t1 where 图书馆名='乙') b
on a.书名=b.书名
where a.序号 is null or b.序号 is null
繁花尽流年 2017-09-14
  • 打赏
  • 举报
回复
引用 7 楼 zengertao 的回复:
[quote=引用 6 楼 yyk7248 的回复:] [quote=引用 1 楼 zengertao 的回复:] select * from ( select library,book,row_number() over(partition by book order by library) as rno from table ) a where rno>1 order by book,rno
不好意思,我没说明白,我是想判断比如,图书馆A有10本书,图书馆B有10本书,这10本书的名分别是一样的[/quote] 随便你几个图书馆几本书,这个都能告诉你,只要是不同图书馆有重名的[/quote]


select a.library,b.book from table a
inner join (
		select book from  table group by  book  having count(book)>1 
) b on a.nook=b.book
order by b.book,a.library
这样你能明白了没
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
表如下: 序号 图书馆名 书名 1 甲 111 2 甲 222 3 乙 111 4 乙 222 这样的结果就返回是 1 甲 111 2 乙 111 3 乙 222 这样的结果就返回否 1 甲 111 2 甲 222 3 乙 111 4 乙 333 这样的结果就返回否
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
表如下: 序号 图书馆名 书名 1 甲 111 2 甲 222 3 乙 111 4 乙 222 这样的结果就返回是 1 甲 111 2 乙 111 3 乙 222 这样的结果就返回否 1 甲 111 2 甲 222 3 乙 111 4 乙 333 这样的结果就返回否
引用 10 楼 acen_chen 的回复:
表结构先给清楚,数量是表中的一个字段还是每本书都有对应的编号,一本书一条记录
acen_chen 2017-09-14
  • 打赏
  • 举报
回复
表结构先给清楚,数量是表中的一个字段还是每本书都有对应的编号,一本书一条记录
二月十六 2017-09-14
  • 打赏
  • 举报
回复
引用 8 楼 yyk7248 的回复:
[quote=引用 2 楼 sinat_28984567 的回复:] 试试这样:
IF ( EXISTS ( SELECT    *
              FROM      ( SELECT    t1.A AS t1A ,
                                    t2.A AS t2A
                          FROM      表 t1
                                    FULL JOIN 表 t2 ON t1.B = t2.B
                          WHERE     t1.A = '甲'
                                    AND t2.A = '乙'
                        ) t
              WHERE     t.t1A IS NULL
                        OR t.t2A IS NULL ) )
    BEGIN
        PRINT '不完成相同'
    END
ELSE
    BEGIN
        PRINT '完成相同'
    END
谢谢您的回答,思路很好,不过,我的图书馆表是一个表,不是在两个表里面[/quote] 代码里没用两个表,是用的“表”然后不同的别名
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
试试这样:
IF ( EXISTS ( SELECT    *
              FROM      ( SELECT    t1.A AS t1A ,
                                    t2.A AS t2A
                          FROM      表 t1
                                    FULL JOIN 表 t2 ON t1.B = t2.B
                          WHERE     t1.A = '甲'
                                    AND t2.A = '乙'
                        ) t
              WHERE     t.t1A IS NULL
                        OR t.t2A IS NULL ) )
    BEGIN
        PRINT '不完成相同'
    END
ELSE
    BEGIN
        PRINT '完成相同'
    END
谢谢您的回答,思路很好,不过,我的图书馆表是一个表,不是在两个表里面
繁花尽流年 2017-09-14
  • 打赏
  • 举报
回复
引用 6 楼 yyk7248 的回复:
[quote=引用 1 楼 zengertao 的回复:] select * from ( select library,book,row_number() over(partition by book order by library) as rno from table ) a where rno>1 order by book,rno
不好意思,我没说明白,我是想判断比如,图书馆A有10本书,图书馆B有10本书,这10本书的名分别是一样的[/quote] 随便你几个图书馆几本书,这个都能告诉你,只要是不同图书馆有重名的
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
引用 1 楼 zengertao 的回复:
select * from ( select library,book,row_number() over(partition by book order by library) as rno from table ) a where rno>1 order by book,rno
不好意思,我没说明白,我是想判断比如,图书馆A有10本书,图书馆B有10本书,这10本书的名分别是一样的
yyk7248 2017-09-14
  • 打赏
  • 举报
回复
引用 4 楼 zbdzjx 的回复:
噢,上个有错误,看这个。
select * from 
(select * from 书的记录 where A='图书馆甲') a,
(select * from 书的记录 where A='图书馆乙') b
where a.B=b.B and a.数量=b.数量
不好意思,我没说明白,我是想判断比如,图书馆A有10本书,图书馆B有10本书,这10本书的名分别是一样的
zbdzjx 2017-09-14
  • 打赏
  • 举报
回复
噢,上个有错误,看这个。
select * from 
(select * from 书的记录 where A='图书馆甲') a,
(select * from 书的记录 where A='图书馆乙') b
where a.B=b.B and a.数量=b.数量
zbdzjx 2017-09-14
  • 打赏
  • 举报
回复
select * from 
(select * from 书的记录 where A='图书馆甲') a,
(select * from 书的记录 where A='图书馆乙') b
where a.A=b.A and a.B=b.B and a.数量=b.数量
二月十六 2017-09-14
  • 打赏
  • 举报
回复
试试这样:
IF ( EXISTS ( SELECT    *
              FROM      ( SELECT    t1.A AS t1A ,
                                    t2.A AS t2A
                          FROM      表 t1
                                    FULL JOIN 表 t2 ON t1.B = t2.B
                          WHERE     t1.A = '甲'
                                    AND t2.A = '乙'
                        ) t
              WHERE     t.t1A IS NULL
                        OR t.t2A IS NULL ) )
    BEGIN
        PRINT '不完成相同'
    END
ELSE
    BEGIN
        PRINT '完成相同'
    END
繁花尽流年 2017-09-14
  • 打赏
  • 举报
回复
select * from ( select library,book,row_number() over(partition by book order by library) as rno from table ) a where rno>1 order by book,rno
数据库原理及应用 课程设计报告 题目: 图管理系统 2012 - 7 1. 需求分析 随着我国市场经济的迅速发展和人们生活水平的不断提高,种类、数量的 不断扩大,图检索速度慢、统计工作量大,难以满足现代化管理的要求。因此 ,建立一套管理软件,科学的对数据进行管理,方便图的检索和读者借 阅工作。通过对对应问题所处环境的调查,对一个实际问题的分析,设计与实现,将原 理与应用相结合,使学生学会如何把本上学到点知识应用于解决实际问题,培养学生 的动手能力以及创新意识;另一方面,使学生深入理解和灵活掌握教学内容。 本程序实现学生与管理员的界面分离模式,同时实现管理员对学生有全面的资 料管理功能。有多个、学生、系统的动态管理功能,如:图的查询、添加、删除 、修改与及学生的详细资料的查询、添加、删除、修改等等多样、动态的管理。同时可 以放权给管理员查询、添加、删除、修改的能力。 设计实现了如下三个功能,分别是籍管理系统,读者管理子系统,借阅者管理子系 统。 籍管理子系统 它主要提供用户登录功能,并按各用户的权限使用本系统。本系统分三类用户:权限 公查询,管理员的权限是借还和管理,超级管理员的权限是管理读者,管理图分 类,管理管理员登录帐户,管理逾期图。 读者管理子系统 主要用于查询图,其直接查询包括按图编号直接查询,按查询,按作者查 询,按出版社查询(可选模糊查询)。多条件查询可以按读者的要求选取所需要的图直 接查询和模糊查询,多条件查询)。 借阅管理子系统 分别是由图管理员管理图(包括图信息的修改,新图的增加,旧图的删除 ),超级管理员管理图分类,管理信息,管理管理员登录帐户,管理逾期. 管理信息系统要完成功能主要有: 1) 读者基本信息查询、修改,包括借证号,读者姓、读者性别等 2) 籍类别的制定,类别信息输入,包括:号,图大类,图小类, 3) 借信息的输入,包括读者学号,号,借时间,还时间,是否归还,续借次数, 管理员编号 4) 借信息的查询包括号,,数量,作者,所属大类,所属小类,出版社, 价格 5) 超期罚款输入包括罚款单号,号,学号,应罚金额,是否交款,罚款日期,管理员编 号 6) 管理员管理管理员编号,姓,地址,电话,备注 7) 籍类别的查询包括号,图大类,图小类 8) 读者基本信息的输入,包括姓,学号,性别,专业,班号,违章状况,已借数目,可 借天数,借时间. 图—1 整体架构图 2. 概念结构设计 2.1 概念结构 一个拥有多个一个室可以存放多本籍,一本籍也可以放在不同的图室 不同管理员可以管理多本籍,不同的籍也可以被不同的管理员管理 不同管理员可以办理多个证,一个证可以由不同的管理员办理 不同借证可以查询不同的籍,一本籍可以被不同的借证查询 一个读者可以借阅多本籍,一本籍也可以被不同的读者借阅 一个读者持有一个证,一个证只能被一个读者持有 一个读者只能查询自己的付款信息表,损害丢失表,还款信息表 2.2 整体E-R图 图—2 整体E-R图 2.3 局部E-R图 图—3 局部E-R图 2.4 数据字典 数据库:TSGLXT.mdb 1. 数据库内含下列表以及说明等 Library() Book(籍) Manager(管理员) Reader(读者) Library_card(借证) Library_room(图室) Publish(出版社) Reserve(存放) Admin(管理) Handle(办理) Before_search(借阅前查询) Last_search(借阅后查询) Offer(提供) Own(拥有) Type(类别) In_and_Out(借还信息表) Bookmanage(籍管理表) Harm_and_Miss(损害丢失信息表) Fine(罚款信息表) 2. 数据库表详细设计 1) Library表 "字段 "字段含义 "数据类型 "约束 " "lname "馆 "Varchar(30) "Not null " "adds "地址 "Varchar(30) " " "b_time "成立时间 "decimal "Not null " "telephone_no"电话 "Varchar(50) " " "r_no "房间号 "Char(7) "Not null " 2) Book表 "字段 "字段含义 "数据类型 "约束 " "b_no "图编号 "Varchar(9) "Not null key " "amount "数量 "Char(7) "Not null " "

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧