2017-03-08 8 views
0

存在しない項目を分類します:は、どのように私は道ブロックに実行され、ここに私の問題であるリスト、表に

私はテーブルを持っている、のが私のカタログ内のすべての項目がある項目にそれを呼びましょうリストされている。 私は、その日に販売された各アイテムをリストするItemSoldを持っています。 私は、Salesと呼ばれる別のテーブルがあります。そこには、照会したい日付があります。

これは私の実例である:

アイテムテーブル enter image description here

販売 enter image description here

を販売 enter image description here

アイテム何のどの日に販売された商品を見つけるために、明らかに簡単です。私の挑戦は、どの日に売られていない商品があるかを調べることです。

私が試してみました:

select i.itemid from items i 
where i.ItemID not in (SELECT   i.ItemID 
FROM   Sales d INNER JOIN 
         ItemSold i ON d.SaleDate = i.SaleDate) 

しかし、唯一のすべてで販売されていないアイテムを提供してくれることを。

私は、次の結果を探しています:私は、MSSQLを使用しています

enter image description here

。 私はテーブルとデータを再作成するスクリプトを添付している:

CREATE TABLE [dbo].[Items](
    [ItemID] [int] NULL 
) ON [PRIMARY] 

GO 

CREATE TABLE [dbo].[ItemSold](
    [SaleDate] [date] NULL, 
    [ItemID] [int] NULL 
) ON [PRIMARY] 

GO 


CREATE TABLE [dbo].[Sales](
    [SaleDate] [date] NULL 
) ON [PRIMARY] 

GO 

私はあなたの助けをいただければ幸いです。これは、仕事でかなり混乱する問題の簡略版です。

答えて

1

すべての可能な行、すべての日付とすべての項目を最初に生成します。次にleft joinを使用して、販売されているものを除外します。

select i.itemid, s.saledate 
from items i cross join 
    sales s left join 
    itemsold si 
    on si.itemid = i.itemid and si.saledate = s.saledate 
where si.itemid is null; 
+0

うわー...ちょうどそのように!どうもありがとうございます! – user1205746

関連する問題