如何过滤GROUP BY之后的数据



有一个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'

最新更新