我遇到了障碍,这是我的问题:
我有一张桌子,我们称之为项目,其中列出了我的目录中的所有项目。 我有ItemSold,它列出了当天售出的每件商品。 我有另一个名为Sales的表,其中包含我想查询的日期。
这是我的例子:
找出哪天售出的商品显然是微不足道的。我的挑战是弄清楚哪一天没有售出的物品。
我试过了:
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。 我附加了脚本来重新创建表和数据:
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
感谢您的帮助。这是一个非常令人困惑的问题的简化版本。
答案 0 :(得分: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;