avatar
问一个SQL Query# Database - 数据库
k*t
1
问一个Squery
表 book
Field 1: bookID
Field 2: bookName
bookID 是primary key
bookName is unique
表 reader
Field 1: bookID
Field 2: readerName
表reader的主键是 (bookID, readerName)
现在需要找出所有的两本书,它们有相同的读者群。
例如
表book中的记录是:
1,a
2, b
3, c
表reader中的记录是:
1, w
1, x
2, w
2, x
3, y
Query出来的结果是
a
b
这个 Query怎么写?
Thanks.
avatar
y*l
2
哪位高手回答一下。
我用了两个query:
select readerBookID,count(readerBookID)From Reader
group by readerBookID
having count(readerBookID)>=2;
得出答案是1,2
然后再回表Book找到a,b
但这种方法在很多records的情况下肯定是不行的。谁教一下怎么合并两个query?谢了先


【在 k*****t 的大作中提到】
: 问一个Squery
: 表 book
: Field 1: bookID
: Field 2: bookName
: bookID 是primary key
: bookName is unique
: 表 reader
: Field 1: bookID
: Field 2: readerName
: 表reader的主键是 (bookID, readerName)

avatar
k*t
3
我自己倒有个做法,只是想看别人有什么别的方法。
我的是这样的:
select b1.name, b2.name
from book b1, book b2
where
b1.bookID != b2.bookID and
not exists (select 1 from reader r1, reader r2
where
r1.bookID=b1.bookID and
r2.bookID=b2.bookID and
r1.readerName != r2.readerName)
BTW, 来这里的人好少。



【在 y*l 的大作中提到】
: 哪位高手回答一下。
: 我用了两个query:
: select readerBookID,count(readerBookID)From Reader
: group by readerBookID
: having count(readerBookID)>=2;
: 得出答案是1,2
: 然后再回表Book找到a,b
: 但这种方法在很多records的情况下肯定是不行的。谁教一下怎么合并两个query?谢了先
: 。

avatar
s*c
4
This is what I thought, not tested yet:
select book1.bookName, book2.bookName
from book book1, book book2
where book1.bookID <> book2.bookID and
not exists
(select *
from reader r1
where (r1.bookID = book1.bookID and
not exists(select * from reader r2
where r2.bookID = book2.bookID and
r2.readerName != r1.readerName))

【在 k*****t 的大作中提到】
: 问一个Squery
: 表 book
: Field 1: bookID
: Field 2: bookName
: bookID 是primary key
: bookName is unique
: 表 reader
: Field 1: bookID
: Field 2: readerName
: 表reader的主键是 (bookID, readerName)

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。