- ベストアンサー
複数テ-ブルでのデータ抽出について
2つの関連するテーブルでの検索がうまくいきません。 検索の条件として、table-1のflag=1に対応する顧客の table-2の最後の日付のデータのみ取得して ☆抽出結果のようにしたいのです。 (そのため、table-1の顧客の「3 田中」さんとそれに関連する データは検索の対象から外れます。) MySQLのバージョンは5.0を使っていますので、サブクエリーも 含めていくつかのパターンでかなり悩みましたが、どうもうまく いきません。 ご存知の方よろしくご教授の程お願い致します。 ☆table-1の内容 id, name , flag --------------------------- 1 山田 1 2 鈴木 1 3 田中 0 ☆table-2の内容 no,id, date , content --------------------------- 1 1 2007-01-01 本 2 1 2007-02-01 ノート 3 1 2007-03-01 ペン 4 2 2007-01-01 消しゴム 5 2 2007-02-01 本 6 3 2007-01-01 ファイル 7 3 2007-02-01 ペン ☆抽出結果 no,id, date , content --------------------------- 3 1 2007-03-01 ペン 5 2 2007-02-01 本
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「どのキーでユニークになるのか」、「自分で考えたSQL」等を提示してもらえば、文章で説明できていない部分も回答者側で推測することも可能なのですけどね。。。 <SQL例> select no,t1.id,`date`,content from `table-1` as t1 inner join `table-2` as t2 on t1.id=t2.id and t1.flag=1 where `date`=(select max(`date`) from `table-2` where t1.id=id)
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
とりあえず3.23系でも動くテンポラリを使ったタイプ create temporary table `t` select `id` ,max(`date`) as `date` from `table-2` group by `id`; select `no`,`t`.`id`, `t`.`date`,`content` from `t` inner join `table-2` on `table-2`.`id`=`t`.`id` and `table-2`.`date`=`t`.`date` inner join `table-1` on `table-1`.`id`=`t`.`id` and `table-1`.`flg`=1
お礼
ご回答ありがとうございます。 > create temporary table `t` ... こんなやり方もあるのですね。 temporaryテーブルと言うものは初めて知りました。 まだまだ、知らない機能などもあるかと思いますがこのような機会を 通じて知ることができますので非常に助かります。 このやり方につきましては、いろいろと試して見たいと思います。 これからもよろしくお願い致します。 ありがとうございました。
お礼
早速のご回答ありがとうございます。 > 「どのキーでユニークになるのか」、「自分で考えたSQL」等を提示してもらえば、文章で説明できていない部分も回答者側で推測することも可能なのですけどね。。。 ごめんなさい、本当はそうすべきですが、あまりにも情けない状況でしたので、提示しませんでした。 m(__)m 尚、教えて頂いた内容で試して見ましたらそのまま通りました。 助かりました、このソースにあります、「inner join」も含めてかなりの やり方で行ったんですがだめだったので、うれしいですね。 皆様から教えていただいた内容は非常に勉強になります。 ありがとうございました。