Tsql 书籍的多个副本,仅显示不可用的副本

Tsql 书籍的多个副本,仅显示不可用的副本,tsql,sql-server-2012,Tsql,Sql Server 2012,好的,我有一个图书馆风格的数据库,我想知道所有售完的书的名字。如果所有的书都被出租了,这本书就被认为已经卖完了。到目前为止,我的问题是: SELECT Book.Title, Physical_book.book_available AS Available FROM Book JOIN Physical_book ON Book.book_id = Physical_Book.book_id WHERE Physical_book.book_available = 'n'; My Physi

好的,我有一个图书馆风格的数据库,我想知道所有售完的书的名字。如果所有的书都被出租了,这本书就被认为已经卖完了。到目前为止,我的问题是:

SELECT Book.Title, Physical_book.book_available AS Available
FROM Book
JOIN Physical_book ON Book.book_id = Physical_Book.book_id
WHERE Physical_book.book_available = 'n';
My Physical_Media Table具有book_available属性,该属性告诉您该书是否具有N或Y。在该表中,如果有多个副本,则会重复该书。也就是说,如果这本书是
Title One
,那么对于
Title One
,我有三个两个,它们都是
2
。其中三本书中有两本用
n
标记,另一本用
y
标记。从技术上讲,我想说的是,这个问题只会把那些书都卖完了的人拉出来。由于它返回
Title ONe
的结果,因此显然无法正常工作。有什么想法吗

表格示例

/* Physical_Book Table */
INSERT INTO Physical_Book (Physical_ID, Book_ID, Book_available)
VALUES (1,1,'y');
INSERT INTO Physical_Book (Physical_ID, Book_ID, Book_available)
VALUES (2,1,'n');
INSERT INTO Physical_Book (Physical_ID, Book_ID, Book_available)
VALUES (3,1,'n');

/*Book Table*/
INSERT INTO Book (Book_ID, author_id, genre_id, title, copyright)
VALUES (1, Tammy, Horror, Book One, 1999)
使用JW查询

SELECT Book.Title, Physical_book.book_available AS Available
FROM Book
JOIN Physical_book ON Book.book_id = Physical_Book.book_id
Group BY Book.title, Physical_book.book_available
HAVING COUNT (*) = COUNT (CASE WHEN book_available = 'n' THEN 1 END);

这样的办法应该行得通

select title
from book
where not exists
(select title
from book
where available = 'Y'
)
假设你有这些记录

╔════╦═══════════╦════════════════╗
║ ID ║   TITLE   ║ BOOK_AVAILABLE ║
╠════╬═══════════╬════════════════╣
║  1 ║ Title One ║ y              ║
║  1 ║ Title One ║ n              ║
║  1 ║ Title One ║ n              ║
║  2 ║ Title Two ║ n              ║
║  2 ║ Title Two ║ n              ║
╚════╩═══════════╩════════════════╝
查询的预期输出为

╔════╦═══════════╗
║ ID ║   TITLE   ║
╠════╬═══════════╣
║  2 ║ Title Two ║
╚════╩═══════════╝

谢谢,我尝试了类似的方法,但这只是输出了所有没有
y
的书,所以换句话说,标题1显示了两次。实际上,它根本不应该出现,因为它有一条记录带有
y
谢谢,但这与我上面的查询完全一样。它返回所有18个书名,所有书名的
都设置为N。我们确实希望获取标记为
n
或不可用的结果,但我们不希望显示有可用书籍副本的记录。你的图片正是我所说的,但是查询返回了所有18本书的标题,也许你错过了其他东西。希望这能有所帮助?连接在我查询的第一部分(quesiton的第一部分),那么
THEN 1 END
到底做了什么,或者它是什么???我对DBtry这个很陌生,
从书中选择a.Book\u ID,a.Author\u ID,a.Title从书中选择a.Book\u ID,a.Book\u ID=b.Book\u ID组通过a.Book\u ID,a.Author\u ID,a.Title HAVING COUNT(*)=COUNT(b.Book\u可用时的大小写='n'然后是1 END)
可能您对这一点不熟悉:
COUNT(b.book\u available='n'然后1 END时的情况)
它基本上只在
book\u available='n'
remove
Physical\u book.book\u available AS
以及
GROUP BY
子句上计算记录,因为它不起作用,因为您只想获得售完的书籍。
╔════╦═══════════╗
║ ID ║   TITLE   ║
╠════╬═══════════╣
║  2 ║ Title Two ║
╚════╩═══════════╝