我對你的答案有一個潛在的解決方案,但它將取決於一些澄清。由於我是新用戶,因此我無法在評論中提出要求。你聲明你有與每個家長相對應的行「袋」。根據我的理解,行李可能有重複的物品。如果父母中存在重複的MD5,您是否只想考慮不同的MD5?其次,你是否只在袋子A =袋子B或者袋子A是袋子B的一個子集並且反之亦然時尋求平等?
我已經提出了一個解決方案,查找考慮的平等關係,只有不同的MD5s:
說我們有在一個子表彙總作爲例如兩個父表所示:
--Create tables that hold our data
if object_id('tempdb..#parent1') is not null drop table #parent1
create table #parent1 (parent varchar(20), words varchar(20), chem varchar(100), bHash varchar(34))
insert into #parent1 values ('parent 1', 'this', 'a', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'a'))))
insert into #parent1 values ('parent 1', 'does', 'b', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'b'))))
insert into #parent1 values ('parent 1', 'not', 'c', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'c'))))
if object_id('tempdb..#parent2') is not null drop table #parent2
create table #parent2 (parent varchar(20), words varchar(20), chem varchar(100), bHash varchar(34))
insert into #parent2 values ('parent 2', 'matter', 'b', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'b'))))
insert into #parent2 values ('parent 2', 'just', 'c', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'c'))))
insert into #parent2 values ('parent 2', 'words', 'a', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'a'))))
insert into #parent2 values ('parent 2', 'duplicate', 'a', upper(sys.fn_sqlvarbasetostr(hashbytes('md5', 'a'))))
if object_id('tempdb..#child') is not null drop table #child
select *
into #child
from #parent1
union all
select * from #parent2
我們可以通過將MD5值視爲字符串來將MD5的行值連接成單個有序列表。連接後,我們可以生成一個新的MD5哈希,它適用於父級的唯一值的集合。
if object_id('tempdb..#parentHash') is not null drop table #parentHash
select distinct parent
--We can create a new hash off an ordered list of distinct values (this is the list)
,stuff((select ','+o.bHash
from (select distinct parent, bHash from #child) o
where o.parent = t.parent
order by o.bHash
for xml path('')),1,1,'') ordered_list
--Create the hash
,upper(sys.fn_sqlvarbasetostr(hashbytes('md5',
stuff((select ','+o.bHash
from (select distinct parent, bHash from #child) o
where o.parent = t.parent
order by o.bHash
for xml path('')),1,1,'')
))) parentHash
into #parentHash
from (select distinct parent, bHash from #child) t
然後,您可以查詢父散列等價的這些值。
select distinct o.parent
,t.parent
from #parentHash o
inner join #parentHash t on o.parentHash = t.parentHash and o.parent <> t.parent
此外,此解決方案假定您只查找具有相同唯一值的行李。如果你擔心重複或父母是彼此的子集,不同的解決方案將不得不探索。
感謝您的回覆。我現在正在閱讀並編輯我的原始問題,以回答您的後續問題。 – Tim
'我們可以通過將MD5值視爲字符串來將MD5的行值連接成單個有序列表。連接後,我們可以生成一個新的MD5哈希,它適用於父級的唯一值集合。「很好,我只是通過字符串連接方法,並且即將發佈有關XML PATH的問題:-) – Tim