我必须根据现有数据获得“建议”的记录分组。
表A的复合键为Akey+Bkey
。表B的主键为Bkey
。
Akey
是从SQL 2012 Sequence对象生成的,表A和表之间存在一对多关系,Bkey上有表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值匹配的现有Bkeys集。为了描述该点,我使用汽车模型的示例。汽车模型中的项目的哈希值可以完全匹配(但它们可能不匹配)。因此,如果所有项目都存在于GroupValue之外,那么我想在表A中插入一组新记录,其中包含在该组中找到完全匹配的值。 在示例数据中,您可以看到AKey 3具有BKeys 2和3,Bkeys 6和7是匹配的,因此这2条记录将插入到表A中,并为AKey生成新的序列#。
答案 0 :(得分:0)
我不确定我是否理解有关groups和GroupValue字段的部分。
根据我的理解,你想在表A中插入表B中与每个AKey的Bkey的HashString匹配的任何行,而表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