我有一个装满设备的表,我试图将其分配给PDU上的电源插座。
我有一个名为PDU的表,插槽为1-16。每个插槽都是一个字段,用于在设备表中查找设备ID。我希望我的查询仅显示尚未分配PDU插槽的设备。
到目前为止,我可以创建一个查询,查找仅在一个插槽中不存在的设备ID,但我希望查询扩展到所有插槽。所以我希望有一个显示所有未分配设备的查询,并让它查看PDU表条目中的所有插槽。
我试着这样做:
SELECT [Devices].Device
FROM [Devices] LEFT JOIN [PDUs] ON [Devices].[ID] = [PDUs].[Slot 1].[Value] OR [Devices].[ID] = [PDUs].[Slot 2].[Value] OR [Devices].[ID] = [PDUs].[Slot 3].[Value]
WHERE ((([PDUs].[Slot 1].Value) Is Null) OR (([PDUs].[Slot 2].Value) Is Null) OR (([PDUs].[Slot 3].Value) Is Null));
但没有成功。
有什么建议吗?
答案 0 :(得分:1)
我会使用UNION来查找PDU插槽中使用的所有设备ID,然后返回不包括使用的设备列表。
这是一些让你入门的伪代码。
SELECT *
FROM [Devices]
where [Devices].[ID] NOT IN
(
SELECT Slot1 FROM PDUs WHERE Slot1 IS NOT NULL
UNION ALL
SELECT Slot2 FROM PDUs WHERE Slot2 IS NOT NULL
UNION ALL
SELECT Slot3 FROM PDUs WHERE Slot3 IS NOT NULL
UNION ALL
SELECT Slot4 FROM PDUs WHERE Slot4 IS NOT NULL
UNION ALL
SELECT Slot5 FROM PDUs WHERE Slot5 IS NOT NULL
UNION ALL
SELECT Slot6 FROM PDUs WHERE Slot6 IS NOT NULL
)