0

我正在构建asp.net mvc应用程序,并且在多个表上编写SQL存储过程时遇到问题。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 

,现在即时通讯卡...

+2

你应该拿一个SQL教程。这些是基本的连接,这与程序没有任何关系,因为您只需将select放入过程中。 –

+0

请发送表结构和关系 –

+0

我知道如何加入,因为我已经做到了上述。我想写程序,但我只找到简单的一个查询程序教程在线@juergend – aiden87

回答

2

像这样的东西应该这样做:

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; 

将得到Book ID和Name,其中customerID等于传入的值。

INNER JOIN将仅获得记录在这两个表中,here是理解联接的好帖子。

+0

认为这会让我开始。谢谢! – aiden87

-1

此处参数@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 
    INNERJOIN 
    BookCategory BC ON 
    BC.BookId = B.BookId 
    INNER JOIN 
    Category CT on CT.Id = BC.CategoryId 

    WHERE 
    C.Id = @Id 

END