質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

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

Q&A

2回答

1082閲覧

SQLのテーブル結合でわからないことがあります

swot

総合スコア4

SQL

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

0グッド

0クリップ

投稿2018/02/04 00:11

PostgreSQLを学んでいますが使っていますが。
テーブルの結合についてわからないことがあります。

顧客の id nameがあるclientテーブル
顧客の id foodがあるmenuテーブルを作っています。

JSPで入力したid(半角数字のみ) name food(foodは寿司 焼肉 ラーメンの3択(複数あり))
をPostgreSQLで登録する機能を作っていますが


clientテーブル
id name gender

  • 1 佐藤  F
  • 2 鈴木 M
  • 3 伊藤 F

menuテーブル
id food

  • 1 寿司
  • 2 寿司
  • 2 ラーメン
  • 3 寿司
  • 3 焼肉
  • 3 ラーメン

で登録していますこれを
SQLのSELECT文で
id name gender food

  • 1 佐藤  F    寿司
  • 2 鈴木  M    寿司
  • 2 鈴木  M    ラーメン
  • 3 伊藤 F    寿司
  • 3 伊藤 F    焼肉
  • 3 伊藤  F    ラーメン

という感じで結合したいのですが可能でしょうか?
可能でしたらSQL文を知りたいです。
どなたかお願いします。

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

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

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

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

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

guest

回答2

0

menuのidはひょっとして、注文者のidを指しているのでしょうか?
だとするならば、前の人が仰る通り、少しテーブル定義を見直してみてもよろしいのではないかと思います。
候補としては
・clientテーブル
・menuテーブル
・orderテーブル

くらいでしょうか。
基本的に「id」はそのテーブルの中で主キー(プライマリキーなどともいう)とすることが多いので、そのテーブルの中で他のレコードと被らないように採番していくのが望ましい名称です。
当然注文に関する情報も必要になってくるので、注文者とメニューを紐づける情報を設定しなければなりません。
例えばmenuテーブルには食べ物を一つずつ登録しておいて、orderテーブルでclientとmenuを紐づける。
つまり、clientとmenuのレコードはあまり増えない、orderは注文があるたびに増えていく。
ちなみに、紐付け用のカラムの名前には、紐づけ先のテーブルの名称を使ったりすることが多いです。

orderテーブル
id client_id menu_id

などといった構成はいかがでしょうか。

一応今のままでもできないことはないです。
以下がそのSQLになります。

SQL

1SELECT 2 menu.id, 3 client.name, 4 client.gender, 5 menu.food 6FROM menu 7LEFT OUTER JOIN client 8 ON client.id = menu.id

動かしていないので動くかどうかはわかりませんが、構文としては合っていると思います。
ポイントはLEFT OUTER JOINです。
SQLでの結合には他にINNER JOINというのもあります。

投稿2018/02/04 01:19

SatoshiMashino

総合スコア210

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

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

0

SQLはデータベースによって方言がある場合があります。PostgreSQLをタグに追加しましょう。

1 寿司

2 寿司
3 寿司
2 ラーメン
3 ラーメン

寿司が3種類もありますし、ラーメンが2種類あるのはテーブル設計がおかしいです。たとえば寿司を選んでもidが1なのか2なのか3なのか判断できません。

誰がどのメニューを選んだかの注文テーブルが必要でしょう。
SQLの質問はCREATE TABLE でテーブル定義を、INSERTでどんなデータが存在するのかを明確にしましょう。

投稿2018/02/04 00:44

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問