这是我桌子的简化版
Name Vlan Switch 1 1 Switch 1 2 Switch 1 3 Switch 2 1 Switch 2 2
我想将属于交换机1的所有VLAN与属于交换机2的所有VLAN进行比较,并使用SQL查询在其中一台交换机中打印出丢失的VLAN。有可能这样做吗?注意所有数据都驻留在同一表中。
在上面提供的示例数据上,查询应返回第3行
Switch 1, 3
这是我之前尝试过的查询(我的要求比查询中的简化版本具有更多条件):
Select Vlans.VLANID From VLANS JOIN Nodes ON VLANS.NodeId = Nodes.NodeID Where Nodes.sysName LIKE 'SSW010%' and Vlans.VlanID NOT In (Select Vlans.VLANID AS Vlan2 From VLANS JOIN Nodes ON VLANS.NodeId = Nodes.NodeID Where Nodes.sysName LIKE 'SSW001%')
这将为您提供所需的服务。它不会对数据做任何假设,并且会提供所有丢失的记录。如果要将其限制为仅“ Switch 1”,则将其添加到WHERE子句中。
SELECT t1.Name, t1.Vlan FROM t t1 WHERE NOT EXISTS (SELECT 1 FROM t t2 WHERE t2.Name <> t1.Name AND t2.Vlan = t1.Vlan) CREATE TABLE t ( Name VARCHAR(10), Vlan INT ) INSERT INTO t VALUES('Switch 1',1) INSERT INTO t VALUES('Switch 1', 2) INSERT INTO t VALUES('Switch 1', 3) INSERT INTO t VALUES('Switch 2', 1) INSERT INTO t VALUES('Switch 2', 2)