0

我必须根据现有数据获得“建议”的记录分组。

表 A 有一个复合键Akey+Bkey. 表 B 的主键为Bkey

Akey由 SQL 2012 序列对象生成,表 A 和表 B 上的表 B 之间存在一对多关系。

下面列出了结构和样本数据。

表 A

Akey  Bkey  ItemSequence
----  ----  ------------
1     1     1
1     5     2
1     7     3
2     7     1
3     2     1
3     3     2

表 B

Bkey  GroupValue       Data            HashString
----  ---------------  --------------  ----------
1     Ford Festiva     AIR BAG         HASH1
2     Ford Festiva     RADIATOR CAP    HASH2
3     Ford Festiva     FUEL PUMP       HASH3
4     Ford Mustang     AIR FILTER      HASH4
5     Ford Explorer    AIR FILTER      HASH5
6     Ford Edge        RADIATOR CAP    HASH2
7     Ford Edge        FUEL PUMP       HASH3

该查询必须将新组插入到表 A 中,这些组与表 B 中 HASH 值匹配的现有 Bkey 集匹配。为了描述这一点,我使用了汽车模型的示例。汽车模型中项目的哈希值可以完全匹配(但可能不匹配)。因此,如果所有项目都存在于 OVER GroupValue 中,那么我想将一组新记录插入到表 A 中,其中包含在该组中找到完全匹配的值。在示例数据中,您可以看到 AKey 3 具有 BKeys 2 和 3,并且 Bkeys 6 和 7 是匹配的,因此这 2 条记录将被插入到表 A 中,并为 AKey 生成一个新序列#。

4

1 回答 1

0

我不确定我是否了解有关组和 GroupValue 字段的部分。

据我了解,您想将表 B 中与每个 AKey 的 Bkey 的 HashString 匹配且表 A 中尚不存在的任何行插入表 A?

如果我理解正确:对于 Akey1,应将 TableB.Bkey 7 行添加到表 A。对吗?

如果逻辑良好,则以下查询应选择这些行。

SELECT 
    a.Akey, a.Bkey, b3.* 
FROM b 
    INNER JOIN a ON a.Bkey=b.Bkey 
    INNER JOIN b b2 ON b2.HashString=b.HashString and b2.Bkey=a.Bkey
    INNER JOIN b b3 ON b3.HashString=b2.HashString AND b3.Bkey <> b.Bkey 
WHERE a.Akey=3 --Comment this line for the full matches
于 2013-06-27T00:24:10.350 回答