查询一组ID

Query for a group of IDs

我使用下面的简单查询来输出一个 partID 列表,该列表基于我们从 sheet 纸上的打印输出中获得的模型 ID。

我们总是一次只使用一个 modelId,就像这样:

   SELECT gm.partId, 343432346 as modelId
   FROM dbo.systemMemberTable sm
   WHERE gm.partID NOT IN (SELECT partID FROM systemsPartTable)

有没有办法创建一次使用 10 个 modelId 的查询?

我想不出办法,因为 modelId 不在任何表格中,只是交给我们的打印输出。

谢谢!

insert 模型 ids 到一个 table 变量,然后用这个 table 变量

join

也使用 not exists 而不是 not in,因为如果 table.

部分中有 null 值,则 not in 不起作用
declare @modelIds table
(
model_id int
)

insert into @modelIds values (343432346) , (123456)

你的 select 会是

因为你想为所有零件重复相同的型号 ID,你可以只使用 cross join

   select gm.partId, m.model_id
   from dbo.systemMeberTable sm
   cross join @modelIds m 
   where not exists ( select 1 from systemPartsTable SPT where  SPT.partId = gm.PartID )

试试这个:

DECLARE @T TABLE (ModelId INT);
INSERT INTO @T (ModelID)
VALUES (343432346), (343432347) -- And so on and so forth

SELECT gm.partId, T.ModelId
FROM dbo.systemMemberTable sm
INNER JOIN @T AS T
    ON T.ModelId = SM.ModelID
WHERE gm.partID NOT IN (SELECT partID FROM systemsPartTable)
Create table #tempmodelTable
(
  @modelid int
)

在此处插入所有模型 ID,然后将 join 与您的 select 查询一起使用

   INSERT INTO #tempmodelTable values(123123)
   INSERT INTO #tempmodelTable values(1232323)
   INSERT INTO #tempmodelTable values(1232343123)

   SELECT gm.partId, modelId
   FROM dbo.systemMemberTable gm inner join #tempmodelTable 
   WHERE gm.partID NOT IN (SELECT partID FROM systemsPartTable)
SELECT gm.partId, T.number as modelId
FROM ( values (4),(9),(16),(25) 
     ) as T(number) 
CROSS JOIN dbo.systemMemberTable sm
WHERE gm.partID NOT IN (SELECT partID FROM systemsPartTable) 

op 说出现错误,但这是为我运行的测试

SELECT T.number as [modelID] 
      ,[main].[name]     
  FROM ( values (4),(9),(16),(25) 
       ) as T(number)  
  cross join [Gabe2a_ENRONb].[dbo].[docFieldDef] as [main] 
  where [main].[ID] not in (1)