1

親子関係で関連する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 の元の並べ替え順序を維持します。それが理にかなっていることを本当に願っています。

いくつか質問があります。

  1. 私はこれについて間違った方法で進んでいますか?各 Sale レコードは 1 つ以上の SaleItem レコードの「親」であるため、各「子」行で「親」データが複製されるため、JOIN はやり過ぎのように見えます。
  2. このデータを各セールの最初の item_type でソートし、各セールのセールアイテムをまとめておくにはどうすればよいですか?

ありがとうございます。

4

1 に答える 1