我现在已经做了大约一个星期的家庭作业,我已经撞墙了。我几乎100%肯定我需要使用NOT EXIST语句,但我不能为我的生活让我的头围绕这些陈述的嵌套。我确信我只是提出了比它需要的更难的问题,但现在就这样了。
我写的3个create table语句如下。
create table libraries (
Libnum varchar(7) primary key,
Libname varchar(40),
Streetnum varchar(8),
Streetname varchar(20),
City varchar(20),
State varchar(2),
Zip varchar(5)
);
create table books (
Booknum varchar(10) primary key,
Btitle varchar(50),
Pages smallint unsigned,
Copyright Date
);
create table copies (
Copynum varchar(12) primary key,
price decimal(7 , 2 ),
Purchase Date,
Booknum varchar(10) references books (Booknum),
Libnum varchar(10) references libraries (Libnum)
);
我正在尝试编写的查询需要返回包含每本书副本的库的Libname。任何帮助将非常感激。我想我需要一本关于书籍和副本的不存在的陈述,然后另一份需要复制和库,但我完全迷失了。
答案 0 :(得分:0)
使用MySQL有几种不同的方法。以下是使用子查询的一种方法:
select libname
from (
select l.libname, count(distinct b.booknum) cnt, bcount.cnt bookcount
from (
select count(1) cnt
from books
) bcount, libraries l
inner join copies c on l.libnum = c.libnum
inner join books b on c.booknum = b.booknum
group by l.libnum
) t
where t.cnt = t.bookcount
也许是一个更好的微小变化:
select l.libname
from libraries l
inner join copies c on l.libnum = c.libnum
inner join books b on c.booknum = b.booknum
group by l.libnum
having count(distinct b.booknum) = (
select count(1) cnt
from books
)
编辑 - 我更新了上述查询以使用DISTINCT计数,以防您的副本表中有多个记录。希望这会有所帮助。