【发布时间】:2018-01-12 16:20:55
【问题描述】:
我需要根据键值列表 (EIBItemID) 从 SQL 表中报告数据,我可以将它们粘贴到这样的查询中
select *
from dbo.SupplyChain_1000469
where EIBItemID in (421290,421316, and so on)
但是,如果返回的结果比我提供的要少,我需要一种快速的方法来报告表中不存在 EIBItemID 的位置,我可以搜索数千个这样的键,但希望避免每次都创建表对于每个列表,更容易将它们粘贴到查询中。
我尝试将记录放入临时表中,然后像这样进行连接
DROP TABLE #EIBItemIDs
CREATE TABLE #EIBItemIDs (EIBItemID INT)
INSERT INTO #EIBItemIDs (EIBItemID)
VALUES (00481771), (00481772), (00481773)
SELECT v.EIBItemID
FROM #EIBItemIDs v
LEFT JOIN dbo.SupplyChain_1799 t ON t.EIBItemID = v.EIBItemID
WHERE t.EIBItemID IS NULL
只查找丢失的行,但有没有办法使用第一个查询但报告每一行(如果键不存在,则只显示空值)?
【问题讨论】:
-
带空检查的左连接是查找不存在的行的最佳方法。您可以将第一个查询与 EXCEPT 运算符一起使用,但它不会像您的第二个查询那样快
-
@sparrow 不是说先把我的列表放到表格里吗?
-
如果我理解正确,您正在将您的列表输入到一个临时表中,这样您就不必重复输入它。我看不出有什么问题。很可能,这个列表也来自另一个表,它可以由另一个 select 语句或查询中的不同连接来定义。按钮行是,左外连接和NULL条件检查,是最快的得到结果的方法。如何定义 ID 列表是另一回事。您关心的是定义列表还是查询本身?
-
该列表通常作为电子表格中的列提供,我们可以将这些作为新表导入 SQL,但将列复制到查询中会更快