ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:takagoo100 別テーブルの行数を利用してソートしたい
困り度:
  • すぐに回答を!
MySQLバージョン4.1.16を使用しています。

テーブル「tbl1」をテーブル「tbl2」の「msg」カラムの行数を利用して
ソートしたいのですが、どのようなSQL文になるのでしょうか?
以下の例だと、tbl2のuser_idがbbbbのmsg数の方が多いので
descで並べるとtbl1はbbbb、aaaaの順になるようにしたいです。

テーブル「tbl1」
+----------+
| user_id   |
+----------+
|  aaaa   |
+----------+
|  bbbb   |
+----------+

テーブル「tbl2」
+----------+---------+
|  user_id  |  msg  |
+----------+---------+
|  bbbb   |  ああ  |
+----------+---------+
|  aaaa   |  いい  |
+----------+---------+
|  bbbb   |  うう   |
+----------+---------+

SELECT * FROM tbl1 INNER JOIN tbl2 ON tbl1.user_id = tbl2.user_id
ORDER BY (ここの部分が知りたいです、または全く違う文になるのでしょうか?) desc
質問投稿日時:08/03/22 04:55
質問番号:3884050
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:nora1962 > 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」に変えてください。
種類:回答
どんな人:一般人
自信:自信あり
回答日時:08/03/22 20:55
回答番号:No.3
この回答へのお礼ご返答ありがとうございます。
なるほど、うっかりミスでした・・・すいません
試してみましたが希望する結果になりました。ありがとうございます。

回答

良回答20pt

回答者:nora1962 よく考えたら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;
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/03/22 08:55
回答番号:No.2
この回答へのお礼ご返答ありがとうございます。
その方法を試してみたのですが、

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」のカラムがあり
値も例のように入れてるのですが、どこが間違っているのでしょうか?

回答

 

回答者:nora1962 お疲れ様です。
こんな感じでどうでしょう。
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;
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/03/22 06:14
回答番号:No.1
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示