mysql - 多个表上的 SQL 存储过程

标签 mysql asp.net sql-server stored-procedures model-view-controller

我正在构建 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

...对于当前登录到 session 的每个用户。

稍后我想将数据输入 Controller ......但这是另一天的问题。

由于我对程序非常陌生,并且只了解一点 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是一篇了解联接的好文章。

关于mysql - 多个表上的 SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45141042/

相关文章:

mysql - 如果datadir设置为软链接(soft link)则无法启动mysql

mysql - 如何在 select 语句中生成条件数字列

SQL Server 2000 : need to return record ID from a previous record in current query

sql-server - T-SQL 列出所有用户映射与登录的数据库角色/权限

php - 在 php 中从数据库填充的下拉列表中设置选定的值

mysql - 跨 3 个表(可能为空表)的内连接

c# - MVC 4 - 在同一页面中显示单行的项目详细信息

ASP.Net 动态切换母版页

php Mysql 将用户消息分组和排序在一起

c# - 访问 LoginView 中的标签