人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL4.x で、SQL を書きたいのですが、以下のような条件の時どう描くのが良いでしょうか?

MMember テーブルは、列が、会員番号、会員名です
1 USER1
2 USER2

MJournal テーブルは、列が、会員番号、記事番号、記事です
1 1 Message1
1 2 Message2
2 1 MessageA
2 2 MessageB
2 3 MessageC

という状態のときに、会員別の最新情報一覧を出力したいと思います

1 2 Message1 User1
2 3 MessageC User2

という具合にしたいのですが、1回のSQLで、この状態を作り出すことはできるでしょうか?
要は、キーが複数列あって、その組み合わせでの最大値でデータを抽出したいのです



●質問者: rikimaru
●カテゴリ:コンピュータ インターネット
✍キーワード:SQL キー データ 抽出
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

MySQL4.x といっても、4.0.X と 4.1.X ではだいぶ違う(サブクエリが使えるようになっている)


4.1.X 以降であれば、

SELECT m.会員番号, j.記事番号, j.記事 FROM
 MMember as M
 JOIN
 (
 SELECT * FROM MJournal AS j1 WHERE j1.記事番号 = (
 SELECT max(j2.記事番号) FROM MJournal AS j2 WHERE j1.会員番号 = j2.会員番号
 )
 ) AS j
 USING ( 会員番号 )
ORDER BY m.会員番号

ってとこですか。


4.0 系ならできなくは無いかもしれないけれど、面倒な割にメリットが無いので

2回に分けたほうがよいです。


2 ● chuken_kenkou
●35ポイント

MySQL 4.0とMySQL 4.1では、サブクエリの実装など、大きな機能差があります。


1.MySQL 4.1以降の場合

select M.会員番号,J.記事番号,J.記事,M.会員名
 from MMember as M
 inner join MJournal as J
 on M.会員番号=J.会員番号
 where 記事番号=(select max(記事番号)
 from MJournal
 where 会員番号=M.会員番号)
 order by M.会員番号

2.MySQL 4.0の場合

(1)作業用の表定義

create temporary table tmp記事
(会員番号 int primary key,
 max記事番号 int)

(2)作業用の表に、各会員の最新記事の番号を格納

insert into tmp記事
 select 会員番号,max(記事番号)
 from MJournal
 group by 会員番号

(3)作業用の表を組み合わせて検索

select M.会員番号,J.記事番号,J.記事,M.会員名
 from MMember as M
 inner join tmp記事 as T
 on M.会員番号=T.会員番号
 inner join MJournal as J
 on T.会員番号=J.会員番号 and T.max記事番号=J.記事番号 
 order by M.会員番号
◎質問者からの返答

おお・・・わかりやすい

前の方同様、サブクエリーの使い方が、非常に面白いです

とても、役に立ちました

ありがとうございます

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ