Sql 如何比较同一表中的记录并查找丢失的记录
这是我表格的简化版本Sql 如何比较同一表中的记录并查找丢失的记录,sql,sql-server,unique,Sql,Sql Server,Unique,这是我表格的简化版本 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
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%')
这应该行得通
select
t1.Name
,t1.Vlan
from table t1
left join table t2
on t1.Vlan = t2.Vlan
and t1.Name='Switch 1'
and t2.Name = 'Switch 2'
where t2.Name is null
union
select
t1.Name
,t1.Vlan
from table t1
left join table t2
on t1.Vlan = t2.Vlan
and t1.Name='Switch 2'
and t2.Name = 'Switch 1'
where t2.Name is null
这会给你你想要的。它不会对数据进行任何假设,并会给出所有缺失的记录。如果要将其限制为仅“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)
使用MS SQL Server。在上检查此工作代码
这将为您获取属于开关1但缺少开关2的值,但反过来呢?您使用的是哪种RDBMS、MS SQL Server、Oracle和MySQL?请充分重新标记您的问题。发布您尝试过的任何有效查询,不管它是否返回正确的解决方案,都是一个起点,也许您离正确答案不远。
SELECT T1.Name, T1.Vlan
FROM yourTable T1
WHERE NOT EXISTS (SELECT 1
FROM yourTable T2
WHERE T2.Vlan = T1.Vlan
AND T2.Name <> T1.Name)
SELECT *
FROM yourTable
WHERE [Name] = 'Switch1'
AND [Vlan] NOT IN(SELECT [Vlan] FROM yourTable WHERE [Name] = 'Switch2')
Name Vlan
Switch1 3