ホームページ  >  に質問  >  本文

SQL メインテーブル - 詳細テーブルから選択 (フォーマットされたデータ)

「Supplier」と「Contact」という名前の 2 つのテーブルがあります。

連絡先テーブルのデータは、サプライヤー テーブルのレコードに対応します。

サプライヤーデータ

###名前### 1 ###馬力### ファーウェイ連絡先データ
id
2

idサプライヤーID ###接続する### 1ジョンスミス ###ミーティング### ###芯### 次に、次の結果を返すクエリを作成したいと思います ###名前### ###接続する###
1
2 1
3 1
4 2 米国エネルギー省
5 2
id

1 ###馬力### ジョン、スミス、ウィル米国エネルギー省、ウェイクまたは、次の結果が返されるはずですid ###名前### ###接続する### ###接続する### ###接続する### ###馬力### ジョン
2 ファーウェイ
1
スミス

###ミーティング###

2 ###芯###
P粉904191507P粉904191507205日前387

全員に返信(1)返信します

  • P粉124890778

    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
  • キャンセル返事
  • ファーウェイ 米国エネルギー省