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

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

詳細はこちら
SQL

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

Q&A

解決済

2回答

1419閲覧

一つのカラムの中に複数の値を入れて、表示したい場合

big_D

総合スコア7

SQL

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

0グッド

0クリップ

投稿2021/01/05 05:53

複数のオンライン診療サービスを統合した医療機関リストを作成したいのですが、
一つの病院で複数の診療科を設けている医療機関もあり、診療科のカラムには複数の値を入れたいと思っております。

sql

1create table potal ( 2 id int, 3 hosp varchar(255), 4 add varchar(255), 5 phone int, 6 jpn text, 7 dep varchar(255), 8 apps varchar(255), 9 press text 10) without oids; 11 12insert into potal (id, hosp, add, phone, jpn, dep, apps) values (1, '町立中標津病院', '北海道標津郡中標津町西10条南9-1-1', 0153728200, '北海道', '産婦人科,耳鼻咽喉科', 'CLINICS'); 13insert into potal (id, hosp, add, phone, jpn, dep, apps) values (2, 'みはら内科クリニック', '北海道函館市本通3丁目9-14', 0138845866, '北海道', '内科', 'curon'); 14insert into potal (id, hosp, add, phone, jpn, dep, apps) values (3, '黒川メンタルクリニック', '北海道札幌市中央区大通西18-1 道新西ビル2階', 0116329600, '北海道', '産婦人科,精神科,心療内科', 'CLINICS'); 15insert into potal (id, hosp, add, phone, jpn, dep, apps) values (4, '札幌西レディースクリニック', '北海道札幌市西区西町北11丁目1番5号', 0116613535, '北海道', '産婦人科', 'CLINICS') 16 17

上記のようにやることで、
診療科のカラム名: dep に複数の値を入れることは出来たのですが、
診療科別でのリスト作成なども考えております。

例:上記のテーブルから産婦人科のみを指定した、リストを作成したい場合

php

1 $query="SELECT * FROM potal WHERE dep IN('産婦人科')";

先述したようにすれば、産婦人科のみを指定をすることが出来るはずなのですが、
この場合だと、四つ目のカラムしか表示されません。

おそらく、四つ目は、診療科のカラムに産婦人科しか値がないため表示することができたが、
一つ目や三つ目の場合は、診療科のカラム: dep に産婦人科以外の値も入っているため、
産婦人科 のみの指定が出来ないことになっています。

この場合どうすればよろしいでしょうか。

説明がへたくそでで長々とした質問になってしまい申し訳ありません。
お答えいただけると嬉しいです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/01/05 05:58

SQL 文のことを聞いているのですから、DB が何か(SQL Server? Oracle? MySQL? その他?)ぐらいは書きましょう。SQL 文は DB によって方言的に違います。
big_D

2021/01/05 06:27

ごもっともです。ご指摘ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/01/05 07:23

質問欄を編集して DB が何かを追記願います。
guest

回答2

0

ベストアンサー

全部一つのテーブルでやろうとしないことです。
名前でそのまま持つのもよろしくありません。

科マスタを作りそちらでコードで管理
病院科管理テーブルを作り病院コードと科コードを保存
病院テーブルと病院科管理テーブルで1対多の関係を作ると良いです。

科検索は病院科管理テーブルで。

join,group byは必須ですね。
何のDB使うのか前提書かれてませんが、使えるならサブクエリ駆使よりwithが有用かもしれません。

「テーブルの正規化」あたりで考え方は学んでおいてください。
役割を見極め、変更がある項目はそれぞれ個別に管理させるようにする形をとっていきます。

投稿2021/01/05 06:03

m.ts10806

総合スコア80875

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

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

big_D

2021/01/05 06:09

それぞれのテーブルを作る必要があるんですね。 「テーブルの正規化」勉強してきます! ご親切に解答ありがとうございました。
m.ts10806

2021/01/05 06:37

必要があるかどうかは要件次第です。データをどのように扱うか次第。 永久に変更の可能性のないデータであると決まっていて検索項目にもないのでしたら、分離させなくても良い可能性もあります。 病院と診療科を都道府県と市町村に置き換えるとイメージしやすいかもしれません。市町村はまあまあ変わる可能性もあるし合併もある。都道府県名は絶対に変わらないとも言い切れない。 オブジェクト指向も必要ですね。 機能、情報同士の関連性を整理すると見えてくるものもあるかもしれません。「変更があったときにどういう構成になっていれば対応しやすいか」
big_D

2021/01/05 07:34

テーブルの正規化について何となく理解できたのですが、今回のケースだと変更があるとすれば、医療機関に新たな診療科が加わるか、おっしゃっていたように都道府県が変わったり住所が変わる事かと思います。 ですが、少し理解できていないところがありまして、 皆さんのご回答だと、診療科として別でテーブルをつくり紐づけをするとありましたが、 例えば診療科のテーブルを作り、診療科番号1に内科、診療科番号2に産婦人科と振り分けていった場合、 全体のテーブルになった時に、Aの病院の診療科が内科と産婦人科の場合、診療科のカラムに1と2が入るだけで結局変わっていない気がするんですが自分の理解が出来ていないのでしょうか。重複した質問申し訳ございません。
m.ts10806

2021/01/05 07:40

私の回答ではテーブルを3つ作るように指南しているはずです。
big_D

2021/01/05 09:55 編集

理解力が乏しく申し訳ありません。 病院コード(医療機関名、住所、電話番号、都道府県) 診療科コード(診療科名) この2つを保存した、病院科アプリ管理テーブルを作成し一つのコードとしてまとめて、 病院テーブルで一体多の構造をつくるという事でしょうか。
guest

0

診療科のカラムには複数の値を入れたいと思っております

RDBの設計としてはこの段階で致命的に間違ってます。
別テーブルに診療科というマスタを定義し、リレーションで表現しましょう。

なおこの手の間違いは初心者にありがち、かつ色んな初心者向けのRDBの入門書に「やっちゃいけない」と昔から繰り返し書かれている話なので、それでもどうしてもやりたい、という場合は理由を説明した方が良いです。

投稿2021/01/05 05:59

編集2021/01/05 06:04
gentaro

総合スコア8947

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問