首页 > 解决方案 > 比较单个表中的值的最佳方法

问题描述

我有一个 SQL 服务器表,其中包含以下格式的数据。

ColumnA : ServerName
ColumnB : ObjectName
ColumnC : HashValue

我需要做的是基于 ColumnB 比较每个服务器的 ColumnC 中的值。目标是查看哪些服务器具有具有不同哈希值的相同对象。

到目前为止,我们所做的是根据服务器名称将表拆分为多个表。所以对于 table_one 它只包含服务器一的数据。

然后我们对服务器二对 table_two 做了同样的事情。

在此之后,我们从 table_one 到 table_two 进行了左连接,因为 table_one 有更多条目。

从这一点我们可以到以下。

select * from table_one 
left join table_two
on table_one.ColumnB =table_two.ColumnB 
where table_one.ColumnC !=table_two.ColumnC

问题是有 10 个服务器,每个服务器至少有大约 10 000 个条目,这是一个缓慢的过程。

select * into table_one from table_one  where ColumnA ="ServerOne"
select * into table_two from table_one  where ColumnA ="ServerTwo"

select * from table_one 
left join table_two
on table_one.ColumnB =table_two.ColumnB 
where table_one.ColumnC !=table_two.ColumnC

我希望看到每个对象的服务器名称与来自服务器一的哈希值不匹配。使用服务器一作为基础,因为它具有大多数对象,不一定与其他对象完全相同。

标签: sqldynamicpivot

解决方案


您不必将它们拆分为不同的表。您可以自己加入一个表:

Select a.ColumnA from your_table a
inner join
your_table b on a.ColumnB = b.ColumnB and a.ColumnC != b.ColumnC

编辑:

我不知道您的表上有什么依赖关系,但以防万一目标不是唯一的,只需将查询调整为:

Select a.ColumnA from your_table a
inner join
your_table b on a.ColumnA = b.ColumnA = a.ColumnB = b.ColumnB and a.ColumnC != b.ColumnC

虽然如果你需要这个声明很多,我还是建议你清理你的桌子。


推荐阅读