• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サブクエリの使い方)

サブクエリの使い方

このQ&Aのポイント
  • テーブルt1とt2にデータが登録されており、t1type毎に一番新しいdateをもつt2codeを抽出したいが、次郎と五郎が適切に抽出されない。
  • 質問者はサブクエリを使用して解決しようとしたが、次郎と五郎が正しく抽出されない理由が分からない。
  • 質問者はタイトル『サブクエリの使い方』で、t1type毎に一番新しいdateをもつt2codeを抽出する件について指摘して欲しい。

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

  • ベストアンサー
回答No.2

SELECT DISTINCT t2_code,date FROM t1 INNER JOIN t2 ON t1_code=t2_code WHERE (t1_type,date) IN(SELECT t1_type,MAX(date) FROM t1 INNER JOIN t2 ON t1_code=t2_code GROUP BY t1_type) でどうでしょうか。

kyabe2_0751
質問者

お礼

すみません。 このサイトの使い方がいまいちわかってなくて、補足に書いてしまいました。 ありがとうございます。

kyabe2_0751
質問者

補足

ありがとうございます。 うまく行きました。 サブクエリがなんとなく理解できそうです。

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

かなり冗長ですが、下記の様なSQLでご希望の結果が出ると思います。 SELECT DISTINCT t21.* FROM t1 t11 INNER JOIN t2 t21 ON t1code = t2code WHERE NOT EXISTS ( SELECT * FROM t1 t12 INNER JOIN t2 t22 ON t1code = t2code WHERE t11.t1type = t12.t1type AND t21.date < t22.date ) 結合したデータ中で t1type が同じで date が自分より後のものが無いものだけに絞り込んでいます。 太郎と花子には、同一の date のデータが存在するので DISTINCT で重複を消しています。 > どこが悪いのでしょうか? t1type でグループ化して t2code を出力していますが、MySQL では GROUP BY で指定されていない項目を SELECT句に指定すると同じグループの中に存在する値の中のどれかになります。(下記ページ参照) http://dev.mysql.com/doc/refman/5.1/ja/group-by-hidden-fields.html ですから、t2code は t1code が同じものの中の『何か』になってしまいます。

参考URL:
http://gihyo.jp/dev/serial/01/sql_academy2/000902
kyabe2_0751
質問者

お礼

すみません。 補足に書いてしまいました。 ありがとうございます。

kyabe2_0751
質問者

補足

こちらでもうまく行きました。 しかし、理解するのに時間がかかりそうです。 NOT EXISTS..... 又、新しい課題が..... じっくり勉強させて頂きます。 >GROUP BY で指定されていない項目を >SELECT句に指定すると同じグループの >中に存在する値の中のどれかになります なるほどです。 どうもありがとうございました。

関連するQ&A