有一个LIBRARY关系数据库。关系是:
- BOOK(BookID,Title,PublisherName(
- BOOK_AUTHORS(图书ID,作者名称(
- 出版商(姓名、地址、电话(
- BOOK_COPIES(BookID,BranchID,NumberOfCopies(
- BOOK_LOANS(BookID、BranchID、卡号、DateOut、DueDate(
- LIBRARY_BRANCH(BranchID、BranchName、地址(
- 借款人(卡号、姓名、地址、电话(
问题:检索在"Sharpstown"分支中可用但在"Morristown"分支中不可用的所有书名。
我为上面的问题写了这个查询,但我不知道如何同时处理这两种情况,因为有些书可能在所有分支机构都有。请帮忙。
```sql
SELECT BOOK.Title
FROM BOOK_COPIES
JOIN LIBRARY_BRANCH
ON LIBRARY_BRANCH.BranchID = BOOK_COPIES.BranchID
JOIN BOOK
ON BOOK.BookID = BOOK_COPIES.BookID
GROUP BY BOOK.BookID
HAVING LIBRARY_BRANCH.BranchName = 'Sharpstown'
```
除外使用
SELECT DISTINCT BOOK.Title
FROM BOOK_COPIES
JOIN LIBRARY_BRANCH
ON LIBRARY_BRANCH.BranchID = BOOK_COPIES.BranchID
JOIN BOOK
ON BOOK.BookID = BOOK_COPIES.BookID
WHERE LIBRARY_BRANCH.BranchName = 'Sharpstown'
EXCEPT
SELECT DISTINCT BOOK.Title
FROM BOOK_COPIES
JOIN LIBRARY_BRANCH
ON LIBRARY_BRANCH.BranchID = BOOK_COPIES.BranchID
JOIN BOOK
ON BOOK.BookID = BOOK_COPIES.BookID
WHERE LIBRARY_BRANCH.BranchName = 'Morristown'
不是答案-见评论
无需分组,只需2个位置和不同以避免重复
SELECT DISTINCT BOOK.Title
FROM BOOK_COPIES
JOIN LIBRARY_BRANCH
ON LIBRARY_BRANCH.BranchID = BOOK_COPIES.BranchID
JOIN BOOK
ON BOOK.BookID = BOOK_COPIES.BookID
WHERE LIBRARY_BRANCH.BranchName = 'Sharpstown' AND NOT LIBRARY_BRANCH.BranchName = 'Morristown'