【发布时间】:2019-12-21 16:23:51
【问题描述】:
我有一个 SQL 服务器表,其中包含以下格式的数据。
ColumnA : ServerName
ColumnB : ObjectName
ColumnC : HashValue
我需要做的是根据 ColumnB 比较每个服务器的 ColumnC 中的值。目标是查看哪些服务器具有不同哈希的相同对象。
到目前为止,我们所做的是根据服务器名称将表拆分为多个表。所以对于 table_one,它只包含服务器一的数据。
然后我们对服务器 2 对 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
我希望看到每个对象的服务器名称与来自服务器一的哈希值不匹配。使用服务器 1 作为基础,因为它的大多数对象不一定与其他对象完全相同。
【问题讨论】:
-
您的 LEFT JOIN 返回常规的 INNER JOIN 结果。将 WHERE 子句条件移至 ON 子句,得到真正的 LEFT JOIN 结果。
-
@jarl,它也会返回与
table_one.ColumnC = table_two.ColumnC无关的行。而是允许在where中使用null。 -
@RomanoBrooks 。 . .用您正在使用的数据库标记我们的问题。