- 締切済み
Mysqlの結合について質問させてください。
MySQL5.0.37 を使用しています。 SQL文の作り方でどうしてもうまくいかないので質問させてください。 下記のような4つのテーブルがあります。 テーブル1:syukkingenba user|basyo 1 |東京 2 |東京 3 |東京 テーブル2:user user|name 1 |イチロウ 2 |ジロウ 3 |サブロウ テーブル3:genba basyo|date |genba_id 東京 |2009/1/10|123 syukkin id|user|date |status 1 |1 |2009/1/10|有効 2 |2 |2009/1/10|有効 3 |3 |2009/1/10|有効 4 |1 |2009/1/10|有効 現在のSQL文は SELECT syukkingenba.`user`, syukkingenba.`basyo`, user.`name`, syukkin.`id` FROM `syukkingenba` INNER JOIN `user` ON syukkingenba.`user` = user.`user` INNER JOIN `genba` ON genba.`basyo` = syukkingenba.`basyo` INNER JOIN `syukkin` ON syukkin.`date` = genba.`date` WHERE genba.`kaisai_id` = '123' AND user.`user` = syukkingenba.`user` AND syukkin.`status` = '有効' と記載しています。 すると結果は syukkingenba.`user`|syukkingenba.`basyo`|user.`name`|syukkin.`id` 1 |東京 |イチロウ |1 2 |東京 |ジロウ |2 3 |東京 |サブロウ |3 1 |東京 |イチロウ |4 となってしまいます。 syukkingenbaを親として、下記のような結果を抽出するにはどうすればよろしいでしょうか? syukkingenba.`user`に紐付くsyukkin.`id`は1でも4でも最初に検索された方でかまいません。 syukkingenba.`user`|syukkingenba.`basyo`|user.`name`|syukkin.`id` 1 |東京 |イチロウ |1 2 |東京 |ジロウ |2 3 |東京 |サブロウ |3 内容が分かりずらいようでしたらすいません。 どうかよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- bleis
- ベストアンサー率68% (11/16)
「最初に検索された方でかまいません」とありますが、SQLには「最初に検索されたものをどうこうする」という考え方はありません。 目的が達成したいだけなら、syukkingenba.`user`、syukkingenba.`basyo`、user.`name`でGROUP BYして、syukkin.`id`とする代わりにMAX(syukkin.`id`)でいいでしょう。 もちろんMINでもかまいません。MAXを使うと4が、MINを使うと1が選択されます。 本題とは直接関係ないですが、ローマ字と英語を混在させると可読性が下がるため、好ましくありません。 どちらか一方に統一したほうがいいと思いますよ。 http://www.geocities.jp/mickindex/database/db_manner.html このページも参考にしてみてください。
お礼
ありがとうございました。