「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 「サブクエリは複数の行を返します」エラーを回避しながら、MySQL の各カテゴリから上位 5 項目を取得するにはどうすればよいですか?

「サブクエリは複数の行を返します」エラーを回避しながら、MySQL の各カテゴリから上位 5 項目を取得するにはどうすればよいですか?

2024 年 11 月 20 日に公開
ブラウズ:604

How to Retrieve the Top 5 Items from Each Category in MySQL While Avoiding the

MySQL の各カテゴリから上位 5 項目を取得する

各メニューカテゴリのトップ 5 メニュー項目は?解決策は、副作用のある変数を使用することにあります。

改訂されたアプローチを詳しく見てみましょう:

サブクエリでは、SQL の @ 表記を使用して副作用のある変数 @r と @g を導入します。これらの変数は、グループ メンバーシップを追跡し、各グループ内のランクを増やすために使用されます。

  1. @g:=null - @g を NULL に初期化し、新しいグループを開始していることを示します。
  2. @r:=0 - @r を 0 に初期化し、新しいランクの開始を示します。
  3. サブクエリの WHERE 句 (どこm.menuid = s.menuid) は、s と m がメニュー ID に基づいて配置されることを保証します。
  4. @r:=case when @g=m.profilename then @r 1 else 1 end - この case 式は増分します。 m.profilename が現在のグループ (@g) と同じ場合は、@r に 1 を加えます。それ以外の場合は、@r を 1 にリセットし、新しいグループの開始を通知します。
  5. @g:=m.profilename - @g を現在のグループのプロファイル名で更新し、これに属する後続の行を追跡できるようにします。 group.
  6. メイン クエリは、サブクエリ テーブル エイリアス X からプロファイル名と名前を取得します。
  7. 最後の WHERE r

このアプローチを実装すると、「サブクエリは複数の行を返します」というエラーが発生することなく、目的の結果を効率的に取得できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3