-1

我努力了

select title
from BOOKS B, AUTHOR A, LOANS U
where a.author_id = b.author_id
and not B.book_id = U.book_id
order by A.name

select title
from BOOKS B, AUTHOR A, LOANS U
where b.author_id = a.author_id
and not b.book_id in (select u.book_id from LOANS)
order by A.name, b.title

我需要的只是我的子查询的结果select u.book_id from LOANS

基本上,表 LOANS 包含从图书馆借来的 book_id 列表。

我需要还没有借出的 book_id 。然后需要按作者姓名的字母顺序对它们进行排序(因此order by A.name

注意:包含书籍的表仅包含 author_id。要获得作者的姓名,我需要将该 author_id 与表 AUTHOR 中的 id 进行比较。

谁能告诉我我做错了什么或者-如果我使用了错误的方法-改用什么方法?

4

3 回答 3

1

这将选择以前未借出的任何书籍的标题。我们可以通过使用NOT IN语句从 BOOKS 中返回book_id不在LOANS表中的任何标题来检查这一点:

SELECT b.title
FROM BOOKS b
INNER JOIN AUTHORS a ON a.author_id = b.author_id 
WHERE b.book_id NOT IN (
    SELECT book_id FROM LOANS
)
ORDER BY a.[Name]

您确实应该使用 ANSI 连接语法而不是使用WHERE语句。

于 2012-10-10T17:20:02.433 回答
1

您的查询加入了Loans表,但随后尝试在Loans. 如果您删除连接上的第二个查询应该工作Loans。第一个如果你LEFT OUTER JOIN和检查U.Book_Id is NULL

顺便说一句,您的子查询返回限定列u.book_id。这不会像您在 select from 中所期望的那样Loans

于 2012-10-10T17:29:37.927 回答
0

我已经找到了。 FROM BOOKS B, AUTHOR A, LOANS U 必须是FROM BOOKS B, AUTHOR A

我的代码最终有效:

select title
from BOOKS B, AUTHOR A
where b.author_id = a.author_id
and not b.book_id in (select u.book_id from LOANS U)
order by A.name
于 2012-10-10T17:28:49.723 回答