• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別テーブルの行数を利用してソートしたい)

別テーブルの行数を利用してソートする方法

このQ&Aのポイント
  • MySQLバージョン4.1.16を使用しています。
  • テーブル「tbl1」とテーブル「tbl2」を結合し、テーブル「tbl2」の「msg」カラムの行数を利用してソートする方法を知りたいです。
  • 例えば、tbl2のuser_idがbbbbのmsg数の方が多い場合、tbl1をbbbb、aaaaの順に並べるようにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

よく考えたらleft join のほうがいいですね。 SELECT tbl1.* FROM tbl1 LEFT JOIN ( SELECT tbl2.user_id,count(*) cnt FROM tbl2 GROUP BY tbl2.user_id) t2 ON tbl1.user_id = t2.user_id ORDER BY t2.cnt desc;

takagoo100
質問者

お礼

ご返答ありがとうございます。 その方法を試してみたのですが、 Error Number: 1054 Unknown column 'tbl2.user_id' in 'on clause' SELECT * FROM users LEFT JOIN (SELECT tbl2.user_id,count(*) cnt FROM tbl2 GROUP BY tbl2.user_id) t2 ON users.user_id = tbl2.user_id ORDER BY t2.cnt desc; というエラーが出てしまいます・・・(usersテーブルはtbl1と同じ構造です) ちゃんとtbl2テーブルには「user_id」と「msg」のカラムがあり 値も例のように入れてるのですが、どこが間違っているのでしょうか?

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

> SELECT * FROM users LEFT JOIN (SELECT tbl2.user_id,count(*) cnt > FROM tbl2 GROUP BY tbl2.user_id) t2 ON users.user_id = tbl2.user_id > ORDER BY t2.cnt desc; インラインビューに「t2」という別名をつけているのに、結合条件のON句 で「tbl2」を使っているからです。「tbl2」を「t2」に変えてください。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、うっかりミスでした・・・すいません 試してみましたが希望する結果になりました。ありがとうございます。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

お疲れ様です。 こんな感じでどうでしょう。 SELECT tbl1.* FROM tbl1 INNER JOIN ( SELECT tbl2.user_id,count(*) cnt FROM tbl2 GROUP BY tbl2.user_id) t2 ON tbl1.user_id = t2.user_id ORDER BY t2.cnt desc;