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
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) ;