- ベストアンサー
2つのテーブルからデータ取得
- 2つのテーブルからデータを取得する際、特定の条件でデータを取得する方法について教えてください。
- 2つのテーブルからデータを取得する際、特定の条件を指定してデータを取得する方法について教えてください。
- データベースのテーブルから特定の条件でデータを取得する方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あ、ごめんなさいindexではなくunique ALTER TABLE `student_upload` ADD UNIQUE (`student_number`,`upload_id`); ちなみにDISTINCTでデータが重複するはずがないので おそらく根本的なところでなにか勘違いしていると思います。 データの取り出しはなにをつかっていますか? プログラム処理をして単に処理を二回しているような気がするのですが・・・
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
#2さんの補足を拝見しましたが、本当にダブリデータがあるのでしたら ダブリを可能にしておく意味がないので ALTER TABLE `student_upload` ADD INDEX (`student_number`,`upload_id`); でユニークを担保すればいいのでは? (すでにダブリデータがある場合は整合性があわないのでエラーになります。 ダブリデータを削除してから実行してください) 別視点で、とりあえず動けばいいやという姑息な判断をするなら DISTINCTするだけでもなんとかなります。 select DISTINCT * from students s, student_upload up where up.upload_id=1 and up.student_number=s.student_number なおデバッグ中はともかくきちんとした運用をするときにはワイルドカード(*)は使わないでください。
補足
yambejpさん、ご回答ありがとうございます。 説明が不足しており、申し訳ございません。 indexはすでに作成済みであります。 また、distinctを追加しても重複したデータで取得されてしまいます。 students にはユニークがありますので、student_upload はダブりデータOKで進めたいと考えております。 恐縮ですが、よろしくお願いいたします。
- chukenkenkou
- ベストアンサー率43% (833/1926)
提示された情報、格納済みデータ、あるいはSQLに、誤りがあるように感じます。 student_uploadは重複データも格納できてしまうので、まったく同じデータを格納してしまっているのでは? その結果、upload_id=2のデータが検索されているのではなく、upload_id=1のデータが増えてしまっているように見えます。
補足
chukenkenkouさん、ご回答ありがとうございます。 student_upload はstudent_number の重複登録可能としております。 SQL文をどのように変更したらよろしいでしょうか。 よろしくお願いいたします。
- yambejp
- ベストアンサー率51% (3827/7415)
とくに問題ないようにみえますが こんな感じになりますよね? id |student_number |name |student_number |upload_id 1 |11111 |いちろう |11111 |1 2 |22222 |じろう |22222 |1
補足
yambejpさん、ご回答ありがとうございます。 ご提示いただいた通りに取得したいのですが student_upload に4件登録されていたら、4件取得されてしまいます。 ---------- id |student_number |name |student_number |upload_id 1 |11111 |いちろう |11111 |1 2 |22222 |じろう |22222 |1 1 |11111 |いちろう |11111 |1 2 |22222 |じろう |22222 |1 ---------- upload_id=2 にも関わらず、1に上書き?されて取得されてしまうのです。 よろしくご教示お願いいたします。
補足
yambejpさん、度々ご回答ありがとうございます。 student_numberとupload_idでユニークにしないと無理でしょうか。 できれば、ユニークキーにはしないで処理を完結させたいと思っております。 ご教示いただいた通りのSQL文をphpMyAdminから実行しております。 なので、プログラムのせいなどではないと思うのですが。 テーブルの構造を見直さないと無理なのでしょうか。