0

SQL Server クエリに問題があります。関連するテーブルがいくつかあります[Order](私は知っていますが、よく名前が付けられていません)[Order Entry].

注文入力は、基本的に注文の「品目」です (したがって、注文ごとに 1 つ以上あります)。注文入力にはさまざまな列があり、そのうちの 1 つが(注文入力ごとに 1ItemIDつのみ) です。ItemIDリストで定義された ItemID のリストを持つ 1 つ以上の注文エントリを含まないすべての行 (注文) を返すクエリが必要です。

これが私がこれまでに持っているものです:

SELECT DISTINCT 
    oe.OrderID, StoreID
FROM 
    OrderEntry oe
INNER JOIN  
    [order] o ON o.ID = oe.OrderID 
              AND o.StoreID = oe.StoreID
              AND oe.ItemID NOT IN (60, 856, 857, 858, 902, 59, 240, 57, 217, 853, 855, 854, 41)

私がやりたいことはこれ(以下)に似ているように見えますが、理解できません: 複数のアイテムを持つすべての注文を選択し、すべてのアイテムのステータスを確認してください

助けてください!(とても有難い)

4

5 に答える 5

0

これを試して:

select OrderId, StoreId
from Order O
where o.orderId not in (select OrderId from 
    OrderEntry d where d.ItemId IN (10,6,7,5) )

よろしく

于 2013-10-19T01:59:01.693 に答える
0

私はあなたの何人か (Miguel Guzman - あなたは私がこれを得るために必要な火花を提供してくれました) からいくつかのピースを取り、それを機能させることができました. ここに私の最後のクエリがあります:

SELECT o.ID, o.StoreID
FROM [Order] o
JOIN PSD_ServiceTicket st
  ON o.ID = st.WorkOrderID
  AND o.StoreID = st.StoreID
WHERE o.StoreID = 101
AND o.Time >= '10/1/2013'
AND o.Time <= '10/18/2013'
AND o.ID NOT IN (SELECT OrderID
         FROM OrderEntry oe
         INNER JOIN [order] o
            ON o.ID = oe.OrderID
            AND o.StoreID = oe.StoreID
         WHERE oe.StoreID = 101
         AND o.Time >= '10/1/2013'
         AND o.Time <= '10/18/2013'
         AND oe.ItemID IN ( 60,856,857,858,902,59,240,57,217,853,855,854,41 )
        )
AND (st.ServiceTypeID = 1 OR st.ServiceTypeID = 4 )

みんなありがとう!

于 2013-10-21T17:43:39.290 に答える
0

私があなたを正しく理解しているなら、あなたはこのようなものが欲しい. Orders テーブルでクエリを開始し、左結合を使用すると、探している注文を確実に取得できます。左に ItemID の一致を結合することにより、where ステートメントで null をチェックして、それらの品目を持たない注文を見つけることができます。

select distinct o.OrderID, o.StoreID
from Orders o
left join OrderEntry oe on oe.OrderID = o.ID and oe.StoreID = o.StoreID
    and oe.ItemID in (60,856,857,858,902,59,240,57,217,853,855,854,41)
where oe.OrderID is null

したがって、これを少し分解するには:

  • 「注文から個別に選択する」とは、「注文からすべてを取得する」ことを意味します

  • 「Left Join OrderEntry on...」は、「この基準を満たすすべての OrderEntry レコードを取得します。基準を満たすレコードがない場合は、null で問題ありません」という意味です。

  • 「oe.OrderID が null の場合」は、「左側の結合で一致しなかった Orders のアイテムのみを表示したい」という意味です。

代わりに内部結合を使用していた場合、「null は問題ありません」という部分が失われていたため、where 句は機能しませんでした。

于 2013-10-18T23:18:41.463 に答える