このために SQL でビューを実現するにはどうすればよいですか? 書籍 2 が置かれている棚に存在する書籍の数を取得したいと考えています。'2' は書籍 ID で、書籍には、shelf_id が関連付けられています。その棚の ID を見つけて、そこに何冊の本があるかを検索するにはどうすればよいですか?
SELECT COUNT(b.book_id)
FROM book b, shelf s
私はいくつかのことを試しましたが、先に進む方法が本当にわかりません。
このために SQL でビューを実現するにはどうすればよいですか? 書籍 2 が置かれている棚に存在する書籍の数を取得したいと考えています。'2' は書籍 ID で、書籍には、shelf_id が関連付けられています。その棚の ID を見つけて、そこに何冊の本があるかを検索するにはどうすればよいですか?
SELECT COUNT(b.book_id)
FROM book b, shelf s
私はいくつかのことを試しましたが、先に進む方法が本当にわかりません。
BOOK
テーブルに既に属性がある場合shelf_id
、次のクエリは、同じ棚にある本の数を として返しますbook 2
。
SELECT COUNT(*) FROM books
WHERE shelf_id = (SELECT shelf_id FROM books WHERE book_id = 2)
この数には、ところbook 2
でも含まれます。SQL Server のプロシージャ定義は次のようになります。
CREATE PROCEDURE sp_get_count_of_books_in_shelf_by_book_id
(
@book_id INT
)
AS
SELECT COUNT(*) FROM books
WHERE shelf_id = (SELECT shelf_id FROM books WHERE book_id = @book_id)
SELECT COUNT(b2.*)
FROM book b1 JOIN book b2
ON b1.shelf_id = b2.shelf_id
where b1.book_id = 2;
また
SELECT COUNT(b2.*)
FROM book b2
where b2.shelf_id in (select shelf_id from book b1 where b1.book_id = 2);
これはうまくいくはずです:
SELECT COUNT(b.book_id)
FROM book b
INNER JOIN (SELECT s.shelf_id FROM book b1, shelf s WHERE b1.shelf_id = s.shelf_id AND b1.book_id = 2) j ON b.shelf_id = j.shelf_id