我正在构建 asp.net mvc 应用程序,但在多个表上编写 SQL 存储过程时遇到问题。
我有 7 个不同的桌子,所有桌子都相互连接。
Customer
Id
Name
CustomerBook
Id
CustomerId
BookId
Book
Id
Name
BookType
Id
BookId
TypeId
Type
Id
Name
BookCategory
BookId
CategoryId
Category
Id
Name
看起来是这样的。
CustomerBook.CustomerId = Customer.Id
CustomerBook.BookId = Book.Id
BookCategory.BookId = Book.Id
BookCategory.CategoryId = Category.Id
BookType.BookId = Book.Id
BookType.TypeId = Book.Id
如果我没记错的话。
我现在想做的是编写存储过程来获取并显示特定用户“购买”的所有书籍。
我想显示:
Book name
Book type
Book category
...对于当前登录到会话的每个用户。
稍后我想将数据输入控制器......但这是另一天的问题。
由于我对程序非常陌生,只了解一点 SQL,我非常感谢您的帮助!
这是我迄今为止尝试过的:
CREATE PROCEDURE [dbo].[getBookByCustomerId]
@Id int
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM [Customer] WHERE Id = @id
END
现在我被困住了...
类似这样的事情应该做到:
CREATE PROCEDURE [dbo].[getBookByCustomerId]
@Id INT
AS
BEGIN
SET NOCOUNT ON;
SELECT
B.Id,
B.Name,
T.Name,
C.Name
FROM Book B
INNER JOIN CustomerBook CB ON B.Id = CB.BookId
INNER JOIN BookType BT ON B.ID = BT.BookID
INNER JOIN Type T ON BT.TypeID = T.ID
INNER JOIN BookCategory BC ON B.BookId = BC.BookId
INNER JOIN Category C ON BC.CategoryId = C.CategoryId
WHERE CB.CustomerID = @Id;
END;
它将获取图书 ID 和名称,其中 customerID 等于传入的值。
INNER JOIN 只会获取两个表中的记录,here 是一篇了解联接的好文章。
这里参数@Id代表客户id。
CREATE PROCEDURE [dbo].[getBookByCustomerId]
@Id int
AS
BEGIN
SET NOCOUNT ON;
SELECT
B.Id, B.Name, T.Name, C.Name
FROM Customer C
INNER JOIN CustomerBook CB ON C.Id = CB.CustomerId
INNER JOIN Book B ON B.Id = CB.Id
INNER JOIN BookType BT ON B.Id = BT.BookId
INNER JOIN Type T ON BT.TypeId = T.Id
INNER JOINBookCategory BC ON BC.BookId = B.BookId
INNER JOIN Category CT on CT.Id = BC.CategoryId
WHERE C.Id = @Id
END