私は次のデータベース構造を持っています:
id idproperty idgbs
1 1 136
2 1 128
3 1 10
4 1 1
5 2 136
6 2 128
7 2 10
8 2 1
9 3 561
10 3 560
11 3 10
12 3 1
13 4 561
14 4 560
15 4 10
16 4 1
17 5 234
18 5 120
19 5 1
20 6 234
21 6 120
22 6 1
詳細は次のとおりです。
表はidproperty
、さまざまな地理的位置を参照しています。例えば:
idgbs
1 refers to United States
10 refers to Alabama with parentid 1 (United States)
128 refers to Alabama Gulf Coast with parentid 10 (Alabama)
136 Dauphin Island with parentid 128 (Alabama Gulf Coast)
したがって、構造は次のとおりです。
United States > Alabama > Alabama Gulf Coast > Dauphin Island
idgbs 136、128、10、1のセットを持つ最初のエントリを除いてidpropertyのすべてのエントリを削除したい。つまり、すべてのGBSに少なくとも1つのプロパティを残し、他のエントリを削除したい。
また、地理的エントリの4レベルの場合もあれば、3レベルの場合もあります。
ロジックとSQLクエリを共有して、一意のGBSごとに1つを除くすべてのエントリを削除してください。
GBS 1、10、128、136は1つの一意であるため、データベースには、これらのGBSを持つ1つのプロパティIDのみを含める必要があります。
クエリの後、テーブルは次のようになります。
id idproperty idgbs
1 1 136
2 1 128
3 1 10
4 1 1
9 3 561
10 3 560
11 3 10
12 3 1
17 5 234
18 5 120
19 5 1
質問の言い換え:
すべてのルートレベルのGBSにプロパティを保持したいのですが、ドーフィン島には1つのプロパティしか存在しないはずです。