不存在于mySQL中

时间:2013-03-14 22:01:48

标签: mysql

我现在已经做了大约一个星期的家庭作业,我已经撞墙了。我几乎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。任何帮助将非常感激。我想我需要一本关于书籍和副本的不存在的陈述,然后另一份需要复制和库,但我完全迷失了。

1 个答案:

答案 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
)

SQL Fiddle Demo

编辑 - 我更新了上述查询以使用DISTINCT计数,以防您的副本表中有多个记录。希望这会有所帮助。