SQL メインテーブル - 詳細テーブルから選択 (フォーマットされたデータ)
「Supplier」と「Contact」という名前の 2 つのテーブルがあります。
連絡先テーブルのデータは、サプライヤー テーブルのレコードに対応します。
サプライヤーデータ
id |
###名前###
|
1
###馬力###
|
2 |
ファーウェイ
|
| 連絡先データ
id
サプライヤーID
###接続する###
|
|
1 |
1
ジョン
|
2 |
1 |
スミス
|
3 |
1 |
###ミーティング###
4 |
2 |
米国エネルギー省 |
5 |
2 |
###芯###
|
次に、次の結果を返すクエリを作成したいと思います
|
|
id |
###名前###
###接続する###
1
###馬力###
ジョン、スミス、ウィル
|
2 |
ファーウェイ |
米国エネルギー省、ウェイク
| または、次の結果が返されるはずです
|
|
id
###名前###
###接続する###
###接続する###
###接続する###
|
|
1 |
###馬力###
ジョン
スミス
###ミーティング###
2
ファーウェイ |
米国エネルギー省 |
###芯###
|
|
| 全員に返信(1)返信します
P粉1248907782024-03-28 09:13:08
MySQL GROUP_CONCAT
集計関数を使用して、最初の出力テーブルを取得できます。独自の ORDER BY
句を使用すると、行の連結順序を確認できます。
リーリー
ウィンドウ関数 ROW_NUMBER
を使用して、サプライヤーごとにパーティション化して Contact テーブルの各行にランキングを割り当てることができます。次に、IF
ステートメントを使用して連絡先が 3 つの列に分割され、ランキングに使用できる 3 つの値がチェックされます。 MAX
集計関数を使用すると、NULL 値を削除できます。
リーリー
2 番目のクエリは、サプライヤーごとに顧客が 3 人を超える場合には機能しない可能性があります。この場合、可能な最大数のサプライヤーを含めるようにクエリを変更するか、準備されたステートメントを使用できます。本当にそのような解決策が必要な場合は、以下にコメントを残してください。
より深く理解するには、ここでこれらのソリューションを使用できます。最初のソリューションは任意の MySQL バージョンで動作し、2 番目のソリューションは MySQL 8 で動作します。
返事
0 キャンセル返事