Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询:查找传递了所有ID的所有设备_Sql_Tsql - Fatal编程技术网

SQL查询:查找传递了所有ID的所有设备

SQL查询:查找传递了所有ID的所有设备,sql,tsql,Sql,Tsql,我有两张桌子 装置 设备ID 设备名称 及 设备属性 设备属性ID 属性ID 设备ID 现在,我尝试编写一个查询,在其中我传入了许多属性ID,我想找到所有传入了所有ID的设备 我以XML的形式传递Id,然后我能够将这些数据转换成一个临时表,每个Id都位于自己的行中 因此,在这一点上,假设我想要匹配的所有属性都在一个表中- 创建表格#临时属性(AttributeId int) 所以,我可能想找到所有属性为3、34和67的设备 我得到了一个将所有设备属性ID连接到一列的查询,但我不确定这是否

我有两张桌子

装置

  • 设备ID
  • 设备名称

设备属性

  • 设备属性ID
  • 属性ID
  • 设备ID
现在,我尝试编写一个查询,在其中我传入了许多属性ID,我想找到所有传入了所有ID的设备

我以XML的形式传递Id,然后我能够将这些数据转换成一个临时表,每个Id都位于自己的行中

因此,在这一点上,假设我想要匹配的所有属性都在一个表中-

创建表格#临时属性(AttributeId int)

所以,我可能想找到所有属性为3、34和67的设备

我得到了一个将所有设备属性ID连接到一列的查询,但我不确定这是否是正确的方向:

SELECT deviceID
 , [Name]
 , (SELECT CAST(cast(attributeID as varchar(10)) + ', ' AS VARCHAR(MAX)) 
     FROM deviceattribute 
     WHERE (deviceID = device.deviceID) 
     order by attributeID
     FOR XML PATH ('')
  ) AS attribs
    FROM device

我想你把这件事搞得太复杂了……我当然是!让自己走上了一条完全错误的道路,没有想到显而易见的解决办法!也就是说,100%是我想要的!很明显,一旦你看到了!非常感谢!!
DECLARE @NumberOfAttributes INT;

INSERT INTO #TempAttribute
SELECT DISTINCT .... /* Rest of your XML query*/

SET @NumberOfAttributes= @@ROWCOUNT;

SELECT DeviceId,
       DeviceName
FROM   Devices
WHERE  DeviceId IN (SELECT DeviceId
                    FROM   DeviceAttribute da
                           JOIN #TempAttribute ta
                             ON da.Attributeid = ta.Attributeid
                    GROUP  BY DeviceId
                    HAVING COUNT(*) = @NumberOfAttributes) ;