如何使用SQL Server显示一个表中不存在但另一个表中存在的记录?
我有3个表,名为如何使用SQL Server显示一个表中不存在但另一个表中存在的记录?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有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 --
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(1201140020012400)
现在我只想显示ItemDynamic.storeid中剩余的storeid,如下所示
预期输出
ItemID StoreID
-----------------
111 1302
111 1500
我尝试了不同的方式,但它带来了所有的存储ID
条件
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'
如果要从
ItemDynamic
获取所有不在Sales
中的StoreID,请点击这里:
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
使用联接:
SELECT t1.*
FROM ItemDynamic t1
LEFT JOIN Sales t2
ON t1.ItemID = t2.ItemID AND
t1.StoreID = t2.StoreID
WHERE t2.ItemID IS NULL
您可以这样做:
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;
这是一个
更新:
如果
S.StoreID为NULL
这意味着此行中没有日期,则Time
列中有一个NULL
。到目前为止您尝试了什么?@Sami通过使用子查询,我们可以轻松实现它。你真的想看吗。我给了这张小桌子。试着不工作了
。。。什么不起作用?除了缺少联接条件外,您的查询看起来是正确的。@mohamedfaiz如果您将S.StoreID设置为NULL
,这意味着S.Time
也为NULL
对不起,请看我的条件,不应该使用子查询。我认为您还需要在ItemID
上联接。此外,这与问题中给出的查询没有什么不同。@TimBiegeleisen正在编写demo@Sami我看了你的演示。它显示正确。但当我尝试使用相同的代码时,另外我在过滤器中添加了时间。但它没有带来任何好处result@mohamedfaiz这是因为您添加了和,并且我认为您输入的日期中没有匹配项set@mohamedfaiz正如我之前所说的,您在设置的日期范围内没有匹配项