0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【SQL】別々のテーブルにある値を結合して条件として活用する

Last updated at Posted at 2021-01-30

はじめに

タイトル通りですが、仕事で別々のテーブルにある値を結合して条件として活用する機会があったので備忘録です。

DBはMySQLを使用しています。

テーブルの作成

例として、病院の予約システムを構築する案件があります。
画面としては予約画面があり、受診日と受診可能開始時間を入力することで予約可能な日時が一覧として表示されるよう機能があるとします。

テーブルとしては以下のテーブルを作成します。
・予約テーブル
・予約時間テーブル

SQL
CREATE TABLE reserves(
	id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	reserve_date DATE NOT NULL,
	created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;
SQL
CREATE TABLE reserve_times(
	id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	reserve_id MEDIUMINT NOT NULL,
	reserve_time TIME NOT NULL,
	reservation_status TINYINT NOT NULL DEFAULT 0 COMMENT '0: 空き, 1: 予約済み',
	created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

データはそれぞれ以下になります。

SQL
INSERT INTO reserves (reserve_date) VALUES('2021-01-30');
SQL
INSERT INTO reserve_times (reserve_id, reserve_time) VALUES(1, '16:00:00')
,(1, '17:00:00')
,(1, '18:00:00')
,(1, '19:00:00')
,(1, '20:00:00');

データを取得する

ユーザが入力した値は以下とします。

2021-01-30 18:00:00

以下は取得するためのSQLです。

SQL
SELECT r.id AS reserve_id,
reserve_date,
reserve_time
FROM reserves AS r
JOIN reserve_times AS rt ON rt.reserve_id = r.id
WHERE CONCAT(r.reserve_date, space(1), rt.reserve_time) >= '2021-01-30 18:00:00';

予約テーブルと予約時間テーブルを結合してから、WHERE句でCONCATを使って予約日(reserve_date)と予約時間(reserve_time)を結合して条件判定に利用しています。

実行してみると以下のような値が取れるかと思います。

reserve_id reserve_date reserve_time
1 2021-01-30 18:00:00
1 2021-01-30 19:00:00
1 2021-01-30 20:00:00

以上、CONCAT関数を使った条件判定の方法でした。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?