以下是我在表格中记录的示例。 EntriesPerSet
列包含表SET_ID
中的记录数。我需要在属于不同SET_ID
的行之间建立等价。当且仅当它们每个Set包含相同数量的条目时,集合将是等效的,并且每个条目在另一个集合中具有相应的条目(通过检查K1
& K2
中的值)。在以下情况中,SET_IDs
1和2是等效的。
SET_ID K1 K2 EntriesPerSet
1 a b 4
1 c d 4
1 e f 4
1 g h 4
2 a b 4
2 c d 4
2 e f 4
2 g h 4
3 a b 5
3 c d 5
3 e f 5
3 g h 5
3 i j 5
4 a b 3
4 c d 3
4 e f 3
5 a b 4
5 c d 4
5 e f 4
5 p q 4
请帮我解决这个问题。谢谢!
答案 0 :(得分:0)
如果您只是想知道哪些对是等价的,您可以使用公用表表达式来获得所有可能的组合,并使用INTERSECT
来确定哪些对完全重叠;
WITH cte AS (
SELECT DISTINCT a.SET_ID aid, b.SET_ID bid, a.EntriesPerSet
FROM mysets a
JOIN mysets b ON a.EntriesPerSet = b.EntriesPerSet AND a.SET_ID < b.SET_ID
)
SELECT aid, bid FROM cte
WHERE EntriesPerSet = (
SELECT COUNT(*) FROM (
SELECT K1,K2 FROM mysets WHERE SET_ID=aid
INTERSECT
SELECT K1,K2 FROM mysets WHERE SET_ID=bid
) a
)