我的第一个选择语句是这样的:
Select AL.asset_key, AL.group_key, AL.entity_key
From assetlist As AL
Where Not Exists (
Select 1
From assetgroup As AG
Where AG.group_key = AL.group_key
And AG.entity_key = AL.entity_key
)
此查询的结果向我显示了任何被错误地分配了 group_key 的资产。我们有一个错误,它会根据非唯一字段抓取第一条记录。因此,如果我有两个名为“Group 1”的组,但它们存在于不同的父类别中,那么根据“Group 1”的第一个匹配项编写新记录的脚本并且不检查它是否是该类别的组. 无论如何,它是固定的,所以我正在尝试做一个清理脚本。上面查询的结果给了我这个:
asset_key group_key entity_key
352 25 3
376 77 3
378 77 3
我的另一个查询是检查 group_key 与实体键,看看正确的值应该是什么:
SELECT distinct
t1.Group_key, t1.entity_key, t1.group_id
FROM assetgroup t1
INNER JOIN assetgroup t2 ON t2.Group_ID = t1.Group_ID
WHERE t2.Group_key != t1.Group_key
and t2.entity_key != t1.entity_key
and t2.Group_ID = t1.Group_ID
order by t1.group_id
结果集如下所示:
Group_key entity_key group_id
25 1 CID
58 2 CID
59 3 CID
77 2 GROUP 1
79 3 GROUP 1
29 4 RENTAL
51 6 RENTAL
53 1 WAREHOUSE
36 5 WAREHOUSE
所以查看这两个结果,我们看到 group_key 25 不属于 entity_key 3,所以我需要更新资产。group_key 到正确的 group_key 值 59 因为这是 group_id 中实体 3 的正确值CID
。其他行也是如此。
我们有多个客户数据库都需要运行这个脚本,所以我不能做简单的事情,只看这两个并编写一些手动更新。我如何编写脚本来完成这一切?
以下是对数据的更详细说明以及需要做什么:
- assetgroup 表将每个资产链接到一个 group_id,该 group_id 完全由 group_key 确定,该 group_key 在表中是唯一的。
- 每个资产组 group_key 都与一个 entity_key 相关联。每个 entity_key 只在每个 group_id 中出现一次。
- 在资产表中,列出了 group_key 和 entity_key,尽管 entity_key 应该完全由 group_key 隐含。
- 但是,某些资产行的 group_key 错误,需要将其更新为与错误 group_key 在同一 group_id 中的该实体的正确 group_key。