SQL存储过程在多个表上
问题描述:
我正在构建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
,现在即时通讯卡...
答
像这样的东西应该这样做:
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
答
此处参数@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
你应该拿一个SQL教程。这些是基本的连接,这与程序没有任何关系,因为您只需将select放入过程中。 –
请发送表结构和关系 –
我知道如何加入,因为我已经做到了上述。我想写程序,但我只找到简单的一个查询程序教程在线@juergend – aiden87