所以我有两张桌子。一个表(tbl1)包含通过构建的子网信息,列名称为 ip_address,位置,服务器,构建,启动IP,结束IP和子网掩码。
我有另一个表(tbl2),其中列名为顶级控制台用户,计算机名称,IP地址,计算机型号,计算机操作系统和计算机序列号
我想创建一个报告,列出来自tbl2的IP地址,它位于tbl1中的起始IP和结束IP之间。因此,例如,如果来自tbl2的计算机具有IP地址172.16.1.4并且tbl1具有其起始IP为172.16.1.1并且结束ip为172.16.1.254的建筑物,那么我希望能够在我的报告中看到它。
两个表中都没有类似的列,所以使用JOIN语句对我来说并没有真正起作用。我还在报告中使用参数(如果这很重要)。任何帮助将不胜感激。
更新:
我知道这很多但它让我到了一半。我创建了一个转换值但不确定如何调用的函数。还有更多指针??
SELECT * FROM Subnets_And_Locations,
(SELECT Computer_System_DATA.UserName00 AS Top_Console_User,
Computer_System_DATA.Name00 + '.' + Computer_System_DATA.Domain00 AS Computer_Name,
System_IP_Address_ARR.IP_Addresses0 AS IP_Address,
Computer_System_DATA.Model00 AS Model,
Operating_System_DATA.Caption00 AS Operating_System,
PC_BIOS_DATA.SerialNumber00 AS Serial_Number
FROM Computer_System_DATA
INNER JOIN Operating_System_DATA ON Computer_System_DATA.MachineID = Operating_System_DATA.MachineID
INNER JOIN System_IP_Address_ARR ON Computer_System_DATA.MachineID = System_IP_Address_ARR.ItemKey
INNER JOIN PC_BIOS_DATA ON Computer_System_DATA.MachineID = PC_BIOS_DATA.MachineID) AS Scope
WHERE Scope.IP_Address >= Subnets_And_Locations.Starting_IP AND Scope.IP_Address <= Subnets_And_Locations.Ending_IP
;
答案 0 :(得分:1)
我建议首先将ip部分转换为相应的完整格式并删除这些点。例如,将172.16.1.254转换为172016001254,然后只需执行>=
和<=
即可轻松比较范围。您甚至可以预先存储这些值以加快此过程。顺便说一下,连接完全没问题。只需使用on子句中的条件。
答案 1 :(得分:0)
Select a.IP_address,
a.location,
a.server,
a.building,
b.*
from table_1 a
join table_2 b on b.ip_address >= a.[starting ip]
and b.ip_address <= a.[ending ip]
这应该对你有用,或者你可以这样试试
Select a.IP_address,
a.location,
a.server,
a.building,
b.*
from table_2 b
join table_1 a on b.ip_address >= a.[starting ip]
and b.ip_address <= a.[ending ip]
我不确定你在报告中想要什么。可能还有一个你需要添加的filkter,但如果没有我在我的头上尝试它,很难说。