我有两张桌子。
设备
和
DeviceAttribute
现在,我尝试编写一个查询,在其中传入一些属性ID,我想查找所有传入所有ID的设备。
我将XML作为XML传递,然后我可以将这些数据转换为临时表,每个Id都在自己的行中。
所以,在这一点上,假设我想要匹配的所有属性都在一个表中 -
CREATE TABLE #TempAttribute(AttributeId int)
所以,我可能想找到所有具有attributeIds 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
希望有人可以提供帮助!
答案 0 :(得分:3)
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) ;