こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mySQL 複数テーブルから検索したい

はじめまして、よろしくお願いします。
職場環境がかわり、はじめてmySQLを使用しています。

3つのテーブルから情報を検索したいのです。

[テーブル名: cast]
name             // PRIMARY KEY
age

(例
なまえ1, 22
なまえ2, 28
なまえ3, 25

[テーブル名: photo]
name
order             // 写真表示順 (INT)
url               // 写真格納先URL

(例
なまえ1, 0, http://なまえ1A.jpg
なまえ1, 1, http://なまえ1B.jpg
なまえ1, 2, http://なまえ1C.jpg
なまえ3, 0, http://なまえ3A.jpg

[テーブル名: schedule]
name
workday           // 出勤日 (DATE)
starttime          // 出勤時間(TIME)
finishtime          // 退勤時間(TIME)

(例
なまえ3, 2013-02-04,  9:00, 17:00
なまえ2, 2013-02-05, 10:00, 18:00
なまえ2, 2013-02-06, 10:00, 18:00
なまえ2, 2013-02-07, 10:00, 18:00


キャスト情報(cast)とそのキャストの写真格納先URL(photo)とキャストの出勤時間(schedule)のテーブルです。
※キャストは何枚でも写真を登録できます。登録していない場合もあります。



キャストのリストを表示したいです。
表示したい項目は

cast.name, cast.age, photo.url, schedule.starttime, schedule.finishtime

になります。

期待する結果は(2月5日の場合)

なまえ1, 22, なまえ1A.jpg, NULL, NULL
なまえ2, 28, NULL,     10:00, 18:00
なまえ3, 25, なまえ3A.jpg, NULL, NULL


すべてのキャストを表示します。
photo.urlはphoto.order=0のもの(photo.order=0の写真をサムネイル表示に使っています)
2月5日に出勤情報があれば表示


いろいろ考えたのですが、どうしても photo にデータがない("なまえ2")のところでつまづいてしまって、どうにも。。。

とりあえずPHPでそれぞれのテーブルの情報を取得して
自分で UNION、 USING('name') みたいな処理してますが、ソースがとっても恰好悪いです。


ズバッとしびれるSQL文をどうかご教示していただきたく、投稿しました。
よろしくお願いいたします><

投稿日時 - 2013-02-04 16:59:32

QNo.7927749

困ってます

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

こんな感じですか?

select cast.name,cast.age,photo.url,schedule.starttime,schedule.finishtime
from cast
left join photo on cast.name=photo.name and photo.order=0
left join schedule on cast.name=schedule.name and schedule.workdate='2013-02-05'

なお、カラムにcastやorderといった予約語をいれると思わぬ落とし穴があったりするので
気をつけてください

投稿日時 - 2013-02-04 18:02:42

お礼

素晴らしいです!
ありがとうございます。

教えていただいたSQL文に使われている命令をよく調べて勉強して
わたしも、サラッ!と書けるようになりたいです。エクセレント!!!

また、予約語の件了解しました。
こちらもほかにどのような予約語があるか勉強してカラム名を変更します。


本当にありがとうございます^^

投稿日時 - 2013-02-04 18:17:21

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問