MySQLでのSQL文で思うようにクエリが作れないでいます。良かったらお知恵を貸して下さい。

2つのテーブルA、Bがあり、
Aのフィールドはsn(int)、Bsn(int)、time(datetime)
Bのフィールドはsn(int)、name(varchar)
それぞれsnが主キーで、テーブルAのBsnとテーブルBのsnが対応しています。
そこで、timeの新しい順に、nameを重複せずに取り出したいのですが、
SELECT DISTINCT B.name FROM A,B WHERE A.Bsn=B.sn ORDER BY A.time DESC
とやるとtimeの順番が正しくなりません。
どうすれば正しく取り出せるのでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/08/22 17:44:57
  • 終了:--

回答(4件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012004/08/22 18:09:38

ポイント10pt

SELECT DISTINCT B.name ,A.time FROM B LEFT JOIN A ON A.Bsn = B.sn ORDER BY A.time DESC

私見ですが、意味の違うフィールドが同じ名称であるというのは後々で取り扱いが面倒になる可能性がありますのでテーブルBのsnは最初からBsnという名称にしておくことをお勧めします。

id:wintarsnow

ご助言ありがとうございます!

>後々で取り扱いが面倒になる

そうなのですか。次からは意識したいと思います。

2004/08/22 18:27:03
id:K-OKU No.2

K-OKU回答回数9ベストアンサー獲得回数02004/08/22 18:14:08

ポイント20pt

http://www.hatena.ne.jp/1093164297

MySQLでのSQL文で思うようにクエリが作れないでいます。良かったらお知恵を貸して下さい。 2つのテーブルA、Bがあり、 Aのフィールドはsn(int)、Bsn(int)、time(datetime) .. - 人力検索はてな

URLはダミーです。

distinct使用時にorder by句に使用したカラムをselectしないのはSQL違反なのでtimeもselectしたらうまくいくのではないでしょうか?

id:wintarsnow

回答ありがとうございます!

>distinct使用時にorder by句に使用したカラムをselectしないのはSQL違反

そ、そうだったのですか。

でもtimeもSELECTすると、timeは値がユニークなので、nameが重複して出てきてしまうのです。

--

質問文では省略していて実際のカラム数も違うのですが、日記のDBでして、テーブルAはタイトルや本文の入ったデータ、テーブルBはカテゴリのリストになってます。

timeが書込時間、

nameがカテゴリ名です。

それで、メニューとしてカテゴリ名を表示したいのです。普通に表示するだけならカテゴリテーブルのnameをSELECTすれば良いだけの話なのですけど、新しい書込があるカテゴリの順番に並べたいのです。

2004/08/22 18:49:26
id:piipo No.3

piipo回答回数7ベストアンサー獲得回数02004/08/22 20:27:01

ポイント50pt

こんな感じで出ないですかね.

SELECT DISTINCT name FROM (SELECT A.time, B.name FROM A,B WHERE A.Bsn=B.sn) ORDER BY time DESC

手元に環境が無いので試せないです.違うかもしれません.

id:wintarsnow

ありがとうございます!

でもサブクエリの部分で構文エラーになってしまいました。

あと明記するのを忘れていましたが、MySQLのバージョンは3.23.58です。

2004/08/22 20:47:40
id:piipo No.4

piipo回答回数7ベストアンサー獲得回数02004/08/22 22:50:43

ポイント50pt

再挑戦です.

今度はどうでしょうか?

SELECT DISTINCT B.name , MAX(A.time) time FROM A,B WHERE A.bsn=B.sn GROUP BY B.name ORDER BY time DESC;

id:wintarsnow

出来ました!! ありがとうございます!

でもなんで出来たのかがわからないのでこの構文を勉強しなくては。

大変助かりました!!

2004/08/22 23:22:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません