🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

578閲覧

SQLで日付条件と複数テーブルのカラムデータを抽出したい

ymr.2525

総合スコア19

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/02/23 06:12

実現したいこと

SELECT文で複数の条件であるテーブルを一覧表示したい。
予約情報一覧をある複数の条件で表示したいのですがわからず、記載させていただきました。

使用リレーショナルDB

postgreSQL

hotel_room

key=room_id

room_idroom_name
12階101号室
22階102号室
32階103号室
42階104号室

hotel_time

key=time_cd

time_idtime_name
1午前07:00~午後7:00
2午前09:00~午後9:00
3午前7:00~翌朝10:00
4午前11:00~翌日午後2:00

yoyaku

key=yoyaku_date, time_id, room_cd

yoyaku_datetime_idroom_idcustom_id
2022-01-22231152
2023-08-05125241
2023-12-24421152
2024-02-22311152

##やりたいこと
custome_idが1152の今日(202102-23)を含んだ日付のyoyakuテーブル一覧を表示したいです。
上記の条件のプラスで、yoyakuテーブル一覧を表示する際は、idではなくてtime_nameとroom_nameで表示したいです。

yoyaku_datetime_nameroom_namecustom_id
2023-12-242階104号室午前09:00~午後9:001152
2024-02-222階103号室午前07:00~午後7:001152

SELECT文のSQLを教えてください。

調べたこと

今日以降をpostgreSQLで表現すると
yoyaku_date >= current_timestamp;

シンプルなSQL文で抽出したいです
以下私が作ったSQLですがこちらでは抽出できませんでした。

postgreSQL

1SELECT yoyaku_date, time_name, room_name, custom_id 2FROM yoyaku 3WHERE custom_id = '1152' 4AND yoyaku.time_id = hotel_time_id 5AND yoyaku.room_id = hotel_room_id 6AND yoyaku_date >= current_timestamp;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私が作ったSQLですがこちらでは抽出できませんでした。

そもそもエラーですからね。
複数のテーブルを参照する場合はfrom句にそれらのテーブルを指定する必要があります。

今日以降をpostgreSQLで表現すると
yoyaku_date >= current_timestamp;

current_timestampだと時刻も含まれます。yoyaku_dateがdate型である場合はcurrent_dateを使用します。

SQL

1SELECT yoyaku_date, time_name, room_name, custom_id 2FROM yoyaku 3 left join hotel_room 4 on yoyaku.room_id=hotel_room.room_id 5 left join hotel_time 6 on yoyaku.time_id=hotel_time.time_id 7WHERE custom_id = '1152' 8 AND yoyaku_date >= current_date

投稿2021/02/23 06:45

編集2021/02/23 06:48
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ymr.2525

2021/02/23 07:51

saziさん 解決できました。 SQLの学習をもっとしないといけないなと反省します。。。 本当にありがとうございます。 JOINは調べるところ内部結合と外部結合がございますが この場合は外部結合を使用するほうが良いということでしょうか?
sazi

2021/02/23 08:48

条件はyoyakuに対してのもので、time_name, room_nameはあくまで参照ですから、yoyakuのroom_idやtime_idが必須なら内部結合でかまいませんが、設定されていない場合もあるなら、外部結合ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問