我创建了以下存储过程:
订单详细信息 - Id(int), OrderId(int), AnniID(int), Quantity(int), UnitCost(money)
周年纪念 - AnniID (int), Title( varchar(50) )
AnniID将是连接2个表的foreignKey。
当我执行存储过程时,尽管它实际上在数据库中有1个项目,但它什么都不返回。
代码有问题吗?或者我没有内心正确加入?
ALTER PROCEDURE dbo.Selectpurchasedwithproducts @AnniID INT
AS
SELECT TOP 5 OrderDetails.AnniID,
Anniversary.Title,
Sum(OrderDetails.Quantity) AS TotalNum
FROM OrderDetails
INNER JOIN Anniversary
ON OrderDetails.AnniID = Anniversary.AnniID
WHERE OrderId IN (
/* This inner query should retrieve all orders that have contained the anniID */
SELECT DISTINCT OrderId
FROM OrderDetails
WHERE AnniID = @AnniID)
AND OrderDetails.AnniID != @AnniID
GROUP BY OrderDetails.AnniID,
Anniversary.Title
ORDER BY TotalNum DESC
RETURN
答案 0 :(得分:0)
看起来你的陈述给我
WHERE OrderId IN
(
/* This inner query should retrieve all orders
that have contained the anniID */
SELECT DISTINCT OrderId
FROM OrderDetails
WHERE AnniID = @AnniID
)
AND OrderDetails.AnniID != @AnniID
等于@AnniID
的OrderDetails如何不等于@AnniID
?
答案 1 :(得分:0)
您的查询对于您的编写方式有点混淆;
首先,你已经在AnniId上加入了两个表:
FROM OrderDetails
INNER JOIN Anniversary
ON OrderDetails.AnniID = Anniversary.AnniID
其次,您希望OrderDetails表中的OrderIds位于AnniId = @AnniId
WHERE OrderId IN
(
/* This inner query should retrieve all orders that have contained the anniID */
SELECT DISTINCT OrderId
FROM OrderDetails
WHERE AnniID = @AnniID
)
但是你需要OrderDetails,其中AnniID不等于@AnniId:
AND OrderDetails.AnniID != @AnniID
您的查询中有几个冲突的语句。你到底想要完成什么?