我有3个名为Item,Sales,ItemDynamic
的表
物品
ID
---
111
112
销售
ItemID StoreID
------------------
111 1201
111 2001
111 2400
111 1400
111 1201
111 1201
111 2400
111 2001
ItemDynamic
ItemID StoreID
------------------
111 1201
111 1302
111 1400
111 2001
111 2400
111 1500
当您使用ItemID对
Sales.StoreID
进行分组时,它只有4个storeID(1201,1400,2001,2400)现在我想只显示ItemDynamic.StoreID中的剩余商店,如下所示
期待输出
ItemID StoreID
-----------------
111 1302
111 1500
我尝试了不同的方式,但它带来了所有的商店
条件
1.不应使用子查询
尝试不起作用
SELECT
IC.ItemID , IC.StoreID
FROM
ItemDynamic IC
LEFT JOIN
Sales S ON S.StoreID = Ic.StoreID
WHERE
S.StoreID IS NULL and S.Time between '2017-07-16' and '2017-07-31'
答案 0 :(得分:1)
你可以这样做:
Declare @Item Table (ID INT);
Declare @Sales Table (ItemID INT , StoreID INT);
Declare @ItemDynamic Table (ItemID INT , StoreID INT);
Insert into @Item values
(111),
(112);
Insert into @Sales values
(111,1201),
(111,2001),
(111,2400),
(111,1400),
(111,1201),
(111,1201),
(111,2400),
(111,2001);
Insert into @ItemDynamic values
(111,1201),
(111,1302),
(111,1400),
(111,2001),
(111,2400),
(111,1500);
SELECT IC.ItemID , IC.StoreID FROM @ItemDynamic IC
LEFT JOIN @Sales S ON S.StoreID = Ic.StoreID
WHERE S.StoreID IS NULL;
这是Demo
<强>更新强>
如果S.StoreID IS NULL
表示此行中没有日期,则NULL
列中会有Time
。
答案 1 :(得分:0)
如果您希望从[{1}}获取ItemDynamic
的所有StoreID,请访问Sales
:
SELECT distinct StoreID FROM ItemDynamic
WHERE StoreID not in (SELECT StoreID FROM Sales)
或没有子查询:
SELECT distinct ItemDynamic.StoreID FROM ItemDynamic
LEFT JOIN Sales ON Sales.StoreID = ItemDynamic.StoreID
WHERE Sales.StoreID IS NULL
答案 2 :(得分:0)
使用联接:
SELECT t1.*
FROM ItemDynamic t1
LEFT JOIN Sales t2
ON t1.ItemID = t2.ItemID AND
t1.StoreID = t2.StoreID
WHERE t2.ItemID IS NULL