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

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

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

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

Q&A

解決済

2回答

237閲覧

MySQL【外部結合について】

jin007

総合スコア34

SQL

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

0グッド

0クリップ

投稿2018/06/14 07:14

編集2018/06/14 08:10

食品名を検索して、データを取ってくるということをやろうとしています。
それぞれのテーブルには、
"materials"テーブルには食品名一覧が入っていて、
"materials_search"テーブル"materials_search_02"テーブルには食品名の読み仮名が入っています。(データが1000件以上になったので2テーブルに分けました)
ex)鮭ならシャケ、しゃけ、さけ、サケ、サーモンという具合。

「やりたいこと」
"materials_search"テーブルと"materials_search_02"テーブルから「さけ」とつく名前のものを見つけ出し、"materials"テーブルの中にある「鮭」と「酒」を取得したい。

「補足」
"materials"テーブルの食品名と
"materials_search"テーブル"materials_search_02"テーブルの食品名読み仮名はIDをすべてつけています。
ex)
"materials"テーブル
materials_id | materials
100000 | 酒
100001 | 鮭

"materials_search"テーブル
materials_id | materials_no |materials_yomi
100000 | 1 |酒
100000 | 2 |さけ
100000 | 2 |サケ

"materials_search"テーブル
materials_id | materials_no |materials_yomi
100001 | 1 |鮭
100001 | 2 |さけ
100001 | 2 |サケ
100001 | 2 |しゃけ
100001 | 2 |シャケ
100001 | 2 |サーモン

SELECT m.materials FROM materials m RIGHT OUTER JOIN materials_search m1 ON m1.materials_search_name ="さけ" AND materials m RIGHT OUTER JOIN materials_search_02 m2 ON m2.materials_search_name = "さけ"

ちなみに、これならできました。

SELECT materials FROM materials NATURAL JOIN materials_search_02 WHERE materials_search_name = "さけ"

【出力結果】
materials


しかし、私が今やりたいのは複数の表("materials_search"テーブル"materials_search_02"テーブル)を検索をして、"materials"テーブルに登録してある名前で出力することです。

情報が足りなければ補足いたします。
お願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/14 08:15 編集

「質問タグ」に、RDBMS名も指定してください。SQL言語は方言がきついため処理系がわからないと適切な回答をしにくいです。質問文中はもちろんですが、質問のあるなしをMyタグにあるもので絞り込んで表示する方が多いので、タグの指定がかなり重要です。
jin007

2018/06/14 08:10

修正いたしました、ご指摘ありがとうございます!
guest

回答2

0

ベストアンサー

※過去質問からMysqlと想定(方言は使用してないのでMysqlでなくても大丈夫だと思いますが)

SQL

1select * from materials 2where materials_id in ( 3 select materials_id from materials_search where materials_yomi='さけ' 4 union all 5 select materials_id from materials_search02 where materials_yomi='さけ' 6 )

投稿2018/06/14 07:40

編集2018/06/14 07:54
sazi

総合スコア25184

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

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

jin007

2018/06/14 08:12

ありがとうございます。 他の検索もする際副問合せや集合演算子を参考にします
guest

0

質問とは離れますが、

"materials_search"テーブルと"materials_search_02"テーブル

一連の情報はひとつのまとめるのが、テーブル設計の基本なので、ひとつのテーブルにまとめておいた方が良さそうに思えます。

投稿2018/06/14 09:40

Orlofsky

総合スコア16415

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

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

jin007

2018/06/15 02:50

1つのテーブルに1000件しかデータを格納できない為2つに分けました。 現在、2000近くのデータがあります。 1000件以上格納できるテーブルの作り方が分からずこうしております。
Orlofsky

2018/06/15 05:54

カラム数とはmaterials_id, materials_no, materials_yomiなどの列の数です。レコード件数は上記URLやディスクの容量の上限になりますから、テーブルを materials_search と materials_search_02 に分ける必要はありません。 1億レコード以上のデータを1,000件毎に分けたらSQLはUNIONの嵐になりパフォーマンスがとんでもなく悪くなります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問