admin

如何比较同一表中的记录并查找丢失的记录

sql

这是我桌子的简化版

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%')

阅读 155

收藏
2021-06-07

共1个答案

admin

这将为您提供所需的服务。它不会对数据做任何假设,并且会提供所有丢失的记录。如果要将其限制为仅“ 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)
2021-06-07