
まだデーターベースを独学で始めて数ヶ月の初心者です。
以下(3行目のleft join)の記述では動かないのですが、どのように
記述したらよいのでしょうか?
やりたい内容は3行目にあるようにbookedというテーブルの中のdateが
2013-06-05だけ抽出した形のテーブルを、timeTplというテーブルとleft join
させたいです。
1 "select *
2 from
3 timeTpl as t left join (SELECT * FROM booked where date ="2013-06-05") as b
4 on
5 t.start >= b.startTime and t.start < b.finishTime ||
6 t.finish > b.startTime and t.finish <= b.finishTime
7 where
8 t.time >
9 (select start
10 from class as c left join member as m
11 on c.className = m.class
12 where m.name = '$name')
13 )
14 ";
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
where以降意味がわからないので割愛して、
とりあえず普通にjoinするやりかたはこう
select * from timeTpl as t
left join booked as b on
b.date ='2013-06-05'
and (
t.start >= b.startTime and t.start < b.finishTime or
t.finish > b.startTime and t.finish <= b.finishTime)
この回答への補足
yambejpさん
いつもお世話様です。
いただいたjoinはたぶんちょっと違うみたいです。
やりたい事は、会員制整体の予約のシステムを構築してまして、
会員の方は(クラス)という、とれる予約の時間帯の制約があります。
店内の流れとしては、(予約時間)から器械にのる⇒(x分後)から先生の
矯正が始まる。みたいに矯正時間と先生が施術を開始する時間は違っています。
先生の矯正時間がかぶらなければ、矯正中に次の方が器械にのり始める事も
可能という前提の作りです。
以下が設定した環境です。
■[booked] as b
予約済みのデーターを収めたテーブル
(date:予約の日付)
(rsvTime:予約時間)
(startTime:先生の矯正開始時間)
(finishTime:先生の矯正終了時間)
■[timeTpl] as t
一日の予約受付時間のテンプレートテーブル
(time:予約受付の時間)ex.10:00,11:15, 12:30, 15:00・・・
(start:上記の場合の先生の矯正開始時間)
(finish:上記の場合の先生矯正終了時間)
■[member] as m
会員さまの基本情報を納めたテーブル。
名前、住所、電話等の他に、その方が予約を取る際の時間の制約(区分)
である「class:クラス」というカラムを設けています。
例えば、
aクラスは、10:00から17:00までしかとれない。
bクラスは、18:00から21:00までしかとれない。
など・・・
■[class] as c
上記に示した、クラスの条件テーブル
(className:クラスの名前)
(start:そのクラスの予約受付開始時間)
(finish:そのクラスの予約受付終了時間)
◆◆私がやりたい事は◆◆
(1)予約済みのDB[booked]から、(ある日)の予約データーのみを抽出・・・(A)
(2)(A)には複数の予約済みデーターが入っており、
【それらの先生の施術に関わる時間】と、
↓ ↑
【予約受付時間のDB[timeTple]の
(start:上記の場合の矯正開始時間)
(finish:上記の場合の矯正終了時間)】
を比較して、かぶっているところをleft join でonの結合条件にしたい。
(結合されたrsvTimeがあるところはつまり予約済みを意味し、
空のところはまだ予約が取れるという作りです)
(3)その際に、その会員の方の属しているクラスのみを抽出したい。
上記を踏まえ、私の考えたsqlが以下です。(うまく動きませんが)
----------------------------------------------------------------------
1 "select *
2 from
3 timeTpl as t left join (SELECT * FROM booked where date ="2013-06-05") as b
4 on
5 t.start >= b.startTime and t.start < b.finishTime ||
6 t.finish > b.startTime and t.finish <= b.finishTime
7 where
8 t.time >
9 (select start
10 from class as c left join member as m
11 on c.className = m.class
12 where m.name = '$name')
13 )
14and
15 time <
16 (select finish
17 from class as c left join member as m
18 on c.className = m.class
19 where m.name = '$name'
20 )";
----------------------------------------------------------------------
どこがいけないのでしょうか?
よろしくお願いします。
No.1
- 回答日時:
SQL文が冗長でいまいち何をしたいかわからないのですが
left join するのはサブクエリではなくbookedでよいのでは?
where句の処理は意味がわからない
timeTplとbookedの簡単な例を書いて、それをどう連携してどういうデータを
取りたいか書いた方が適切な回答がつきやすいと思います
この回答への補足
要領を得ない質問で申し訳ございません。
where句及び全体の内容は仮に無視し、3行目だけにスポットをあてて
見た時に、記述の仕方として問題があるのか、もしくは冗長でスマートでは
ないけど、動かないはずはないのか、をまず教えていただければありがたいです。
後程また再度全体が分かるようきちんと質問させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- PostgreSQL 投稿記事と関連付けているテーブルがわからない 1 2022/04/27 20:29
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLサーバに対するSQL文で抽出...
-
SQLで、Join句で結合したテ...
-
既存データをINSERT文にして出...
-
結合したテーブルをSUMしたい
-
同一テーブル内での比較(最新...
-
テーブル名が可変の場合のクエ...
-
データ無し時は空白行にしたい...
-
ACCESSのVBAにてExcelに行...
-
重複データの一方を削除するSQL...
-
改行を含んだデータのインポート
-
Access特定のテーブルを編集不...
-
複数のテーブルからデータを取...
-
異なるテーブルの値を比較テー...
-
pythonでsqlight勉強中、クエリ...
-
あってますか?SQL
-
DB、キャストとインサートを...
-
ExcelのMatch関数のようなもの...
-
(SQL)日数の計算
-
PRIMARY KEYのコピー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
既存データをINSERT文にして出...
-
同一テーブル内での比較(最新...
-
SQLサーバに対するSQL文で抽出...
-
副問合せを使わずにUNIONと同様...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
PRIMARY KEYのコピー
-
2つのテーブルをLIKE演算子のよ...
-
ACCESSのVBAにてExcelに行...
-
DB2のSQLコマンドについて
-
Excelでしりとりを作る方法
-
ExcelのMatch関数のようなもの...
-
改行を含んだデータのインポート
-
ExcelのVLOOKUP関数の動作をMyS...
-
ADO+ODBCでテーブルに接続する...
-
データ無し時は空白行にしたい...
-
Access特定のテーブルを編集不...
おすすめ情報