DB にクエリを実行して、さまざまなテーブルから情報を抽出します。おそらくSQLの外部で使用できる許容可能な結果を得ることができました。私が得た結果は非常に非効率的であり、SQL に何らかの作業をさせる方法があるかどうか疑問に思っています。基本的に、データをより効率的にグループ化し、一部を破棄する必要があります。
現在のクエリの結果は、次のように簡略化できるテーブルになります。
product_id | person_id | person_type | person_address | other_column
1 | 1001 | 1 | 999 Main St | info about product 1
1 | 1245 | 0 | | info about product 1
1 | 5133 | 2 | 101 Sql St | info about product 1
1 | 9191 | 0 | 1 Query Ave | info about product 1
2 | 5451 | 1 | 40 Table Rd | info about product 2
2 | 6610 | 0 | | info about product 2
したいのですがGROUP BY product_id
、別々person_id
に保管しperson_address
てperson_type=0
ください。person_id
次に、同じ を共有するすべてのアドレスを連結しますproduct_id
。から値を 1 つだけ保持しother_column
ます。上記の表に適用すると、次のようになります。
product_id | person_id | person_address | other_address | other_column
1 | 1245 | | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
1 | 9191 | 1 Query Ave | 999 Main St; 101 Sql St | info about product 1
2 | 6610 | | 40 Table Rd | info about product 2
--
または、2 番目に良い解決策は
次のGROUP BY product_id
とおりperson_id
です。結果は次の表のようになります。person_type=0
product_id
person_address
other_column
product_id | person_id | person_address | other_column
1 | 1245; 9191 | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
2 | 6610 | 40 Table Rd | info about product 2
--
背景を説明するために、2 つの目的があります。1 つ目はother_column
、不要な重複を抽出して破棄することです。文字情報なのでかなり重いです。2 番目の目的は、 を持っていない人のために位置情報を取得できるようにすることです。person_id
person_address
(似たような質問を探してみましたが、見つかりませんでした。)