查询一组ID

时间:2015-01-07 18:02:56

标签: sql sql-server tsql

我使用下面的简单查询根据我们从一张纸上的打印输出中获得的modelID输出partID列表。

我们总是一次只使用一个modelId:

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:3)

insert将模型ID导入表变量,然后使用此表变量执行join

如果部分表中有not exists个值,则使用not in代替null,但不能使用declare @modelIds table ( model_id int ) insert into @modelIds values (343432346) , (123456)

cross join

你的选择将是

如果您希望为所有部分重复相同的模型ID,则可以使用 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 )

{{1}}

答案 1 :(得分:3)

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) 

答案 2 :(得分:2)

试试这个:

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)

答案 3 :(得分:2)

Create table #tempmodelTable
(
  @modelid int
)

在此处插入所有modelid,然后使用您的选择查询

连接
   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)