私の最初の選択ステートメントはこれです:
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 が割り当てられたアセットが表示されます。一意でないフィールドに基づいて最初のレコードを取得するバグがありました。したがって、「グループ 1」という名前の 2 つのグループがあり、それらが異なる親カテゴリに存在する場合、スクリプトは「グループ 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
。他の行についても同様です。
このスクリプトを実行する必要がある複数の顧客データベースがあるため、簡単なことはできず、これら 2 つを見て、手動で更新を作成するだけです。これをスクリプト化してすべてを完了するにはどうすればよいですか?
以下は、データと何を行う必要があるかについてのより詳細な説明です。
- assetgroup テーブルは、テーブル内で一意の group_key によって完全に決定される group_id に各アセットをリンクします。
- 各アセット グループ group_key は、entity_key に関連付けられています。各 entity_key は、各 group_id に一度だけ存在します。
- 資産テーブルには、group_key と entity_key がリストされていますが、entity_key は group_key によって完全に暗示されているはずです。
- ただし、一部のアセット行には間違った group_key があり、間違った group_key と同じ group_id 内のそのエンティティの正しい group_key に更新する必要があります。