0

次のストアド プロシージャを作成しました。

注文詳細 -Id(int), OrderId(int), AnniID(int), Quantity(int), UnitCost(money)

記念日 -AnniID (int), Title( varchar(50) )

AnniID は、2 つのテーブルをリンクする外部キーになります。

ストアド プロシージャを実行すると、実際にはデータベースに 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
4

2 に答える 2

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ますか?

于 2012-07-30T11:22:19.140 に答える
0

あなたのクエリは、あなたが書いた方法と少し混乱しています。

まず、AnniId で 2 つのテーブルを結合しました。

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
)

ただし、AnniID が @AnniId と等しくない OrderDetails が必要です。

AND OrderDetails.AnniID != @AnniID

クエリにいくつかの矛盾するステートメントがあります。正確に何を達成しようとしていますか?

于 2012-07-30T11:25:30.307 に答える