親子関係で関連する2つのテーブルがあります
Sale
sale_id | customer_name
SaleItem
item_id | sale_id | item_type
各 Sale レコードには、1 つ以上の対応する SaleItem レコードがあります。私の目標は、Sales のリストを作成し、対応する SaleItems を子として表示することです。私はこのクエリでこれを行うことができます:
SELECT s.sale_id, s.customer_name, si.item_id, si.item_type
FROM Sale s, SaleItem si
WHERE s.sale_id=si.sale_id
ORDER BY s.sale_id, si.item_id
これにより、次のような結果が得られます (問題を明確にするために空白行が追加されています)。
sale_id | customer_name | item_id | item_type
1 | Sam | 1 | D
1 | Sam | 2 | B
1 | Sam | 3 | D
2 | Nate | 4 | A
2 | Nate | 5 | B
3 | Mike | 6 | B
3 | Mike | 7 | C
4 | Nate | 8 | C
4 | Nate | 9 | D
ORDER BY 句により、Sales とその注文された SaleItems が論理的にグループ化されます。これにより、データを表す素敵な折りたたみ可能な UI をコーディングできるようにするために必要なデータが得られます。
-Sale 1 - Sam
-B
-B
-D
+Sale 2 - Nate
+Sale 3 - Mike
-Sale 4 - Nate
-C
-D
これで問題ありませんが、このリストを item_type で並べ替えるとどうなりますか? 私はこのような結果セットになりたいです(問題を明確にするために空白行が追加されています):
sale_id | customer_name | item_id | item_type
2 | Nate | 4 | A
2 | Nate | 5 | B
3 | Mike | 6 | B
3 | Mike | 7 | C
4 | Nate | 8 | C
4 | Nate | 9 | D
1 | Sam | 1 | D
1 | Sam | 2 | B
1 | Sam | 3 | D
各セールとそれに対応するセールアイテムが一緒に残っていることに注意してください。基本的に、ここで行う必要があるのは、Sale+SaleItems の各セットを 1 つの要素として扱い、それらを任意の列でインテリジェントに並べ替えることです。基本的に、ここでは Sales を並べ替えるだけで、item_type が SaleItem に適用されるため、最初の SaleItem の item_type で並べ替え、Sale 内の SaleItems の元の並べ替え順序を維持します。それが理にかなっていることを本当に願っています。
いくつか質問があります。
- 私はこれについて間違った方法で進んでいますか?各 Sale レコードは 1 つ以上の SaleItem レコードの「親」であるため、各「子」行で「親」データが複製されるため、JOIN はやり過ぎのように見えます。
- このデータを各セールの最初の item_type でソートし、各セールのセールアイテムをまとめておくにはどうすればよいですか?
ありがとうございます。