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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

3回答

2073閲覧

MySqlにおいて、テーブル結合方法に不明な所があります。

dreamers

総合スコア61

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2021/05/24 01:27

編集2021/05/24 03:10

■おたずねしたいこと

「メインテーブル」、「子テーブル」、「孫テーブル」があるとします。

  「メインテーブル」と「子テーブル」に共通のキー項目があり、テーブル結合ができる。
「子テーブル」と「孫テーブル」に共通のキー項目があり、テーブル結合ができる。
「メインテーブル」と「孫テーブル」間に共通のキー項目が無い。

この場合、SELECT文を用いて、「孫テーブル」から、値を取り出すことができるのでしょうか。

※マイクロソフトのACCESSなどは、簡単に孫テーブルも結合できたはずなのですが、、

##<サンプル>

■メイン、子、孫テーブルが結合できると仮定した場合の結合結果
|データベースid|データベース名|行数|フィールドid|フィールド名|値|
|:--|:--:|
|2 |コンビニ一覧 |5 |18 |店名|セブンイレブン

■使用するテーブル

・(A)データベース名テーブル    ➡孫テーブル

データベースidデータベース名
2 コンビニ一覧 

・(B)データベース入力行数テーブル ➡子テーブル

データベースid入力行数
2 5 

・(C)メインテーブル      ➡メインテーブル

入力行数フィールドid
5 18 セブンイレブン

・(D)フィールド名テーブル     ➡子テーブル

フィールドidフィールド名
18 店名 

■再度、おたずねしたいこと

<「(C)メインテーブル」➡メインテーブル> と
<「(A)データベース名テーブル」➡孫テーブル> に
共通のキー項目が無いが、SELECT文を用いて、この2つのテーブルを結合し、<「(A)データベース名テーブル」➡孫テーブル>から値を取得することは可能でしょうか。

※下記方法で、<「(A)データベース名テーブル」➡孫テーブル>から値を取得しようとしましたが、<「(A)データベース名テーブル」➡孫テーブル>のJOINができませんでした。

SELECT *    FROM 「(C)メインテーブル」as (C) JOIN 「(D)フィールド名テーブル」as (D) ON  (C).フィールドid = (D).フィールドid JOIN 「(B)データベース入力行テーブル」as (B) ON  (C).入力行数 = (B).入力行数

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

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

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

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

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

yambejp

2021/05/24 01:56

サンプルが足りないので何をしたいかわかりづらいです テーブルもcreate table+insertで例示してください
dreamers

2021/05/24 03:04

わかりづらくて、申し訳ございません。 質問を分かり易く訂正させていただきました。 SELECT文を使って、孫テーブル(という用語があるかどうか分かりませんが)からの値取得をしたい、ことについての質問です
guest

回答3

0

ベストアンサー

何か難しく考えてませんか?
関連する項目を繋げるだけですよ。

SQL

1select t1.データベースid, t1.データベース名, t2.入力行数, t3.フィールドid, t4.フィールド名, t3.2from データベース名テーブル as t1 3 inner join データベース入力行数テーブル as t2 4 on t1.データベースid=t2.データベースid 5 inner join メインテーブル as t3 6 on t2.入力行数=t3.入力行数 7 inner join フィールド名テーブル as t4 8 on t3.フィールドid=t4.フィールドid

投稿2021/05/24 03:40

編集2021/05/24 03:42
sazi

総合スコア25327

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

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

dreamers

2021/05/24 10:46

sazi様、ご回答、ありがとうございます。 ネットではあまりこの孫テーブル?のことについて記述が無い気がしました。 ちなみに、sazi様のSQLで、一番最後の  inner join フィールド名テーブル as t4 on t3.フィールドid=t4.フィールドid を一番最初に記述しても、機能するのでしょうか、 それとも、メインテーブル「 データベース名テーブル as t1」と共有のキーを持っている「データベース入力行数テーブル as t2」のようなテーブルを、メインテーブル「 データベース名テーブル as t1」の直後に記載しなくてはいけないのでしょうか
sazi

2021/05/24 11:44

順序を変えるのは可能ですが、on 句で指定する項目が属する表は、記述上onより前に記述しておく必要があります。 Accessを例にされていますが、Accessでも同じですよ。 ※Accessはjoinの区切りを()で括らないと駄目なのでより厳密です。
sazi

2021/05/24 15:35 編集

別に更新する訳ではなく、selectなので、試すのが早いと思います。 件数が多いという事なら、where条件やlimit付ければ結果までの時間は短縮されます。
dreamers

2021/05/24 14:40 編集

sazi様、ご回答、ありがとうございます。 理解できました。 ネット、書籍情報などは、子テーブルとマスターテーブルが、共有キーをもっている事例がほとんどで、今回のような事例が見当たらず、困っていました。 また、JOINするテーブルの順は基本、任意でヨシ、とかの細かい事例が見当たりませんでした。 (この辺は、現場では当たり前で、経験で培うものなのでしょうか、、) (ACCESSで、テーブル同士のキーを結合するとき、順番など関係ない、ことと、おなじなんでしょうね。  ACCESSは以前、触っていましたが、ACCESSでの動きと、MySqlの動きは基本、同じ、ということなんでしょうね。) このたびは、誠にありがとうございました。
guest

0

イマイチ何をされたいのか分かりづらいですが
テーブルに他のテーブルのテーブル名やカラム名を書いても
SQL文でそれを利用して検索をすることはできません
プロシージャを利用することになると思います

投稿2021/05/24 01:59

yambejp

総合スコア116720

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

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

maisumakun

2021/05/24 02:00

「テーブルに他のテーブルのテーブル名やカラム名を書」くようなことはしていないと思うのですが。
yambejp

2021/05/24 02:05 編集

「コンビニ一覧」テーブルの「店名」カラムの「5行目」の値である「セブンイレブン」 を抽出したいという命題にも読めるのでこの様な回答になっています
dreamers

2021/05/24 03:06

私の質問がわかりずらく、誤解を生むようなもので、もうしわけございません。 再度、分かり易く、質問を訂正させていただきました。
guest

0

この2つのテーブルを結合することは可能でしょうか。

可能か不可能かだけを言えば可能です。

ただし、Bのテーブルを使わずにやろうとすれば、CROSS JOINといって、「Aの全行×Cの全行」というテーブルを生成する処理となってしまいます。おそらく、そのような結果が得られたところで役には立たないのではないかと思います。

投稿2021/05/24 01:33

編集2021/05/24 01:36
maisumakun

総合スコア146018

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

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

dreamers

2021/05/24 01:42

(メインテーブルと結合した)Bテーブルのデータベースid、と、Aテーブルのデータベースid、を、結び付けることで、メインテーブルとAテーブルを結合することができる方法があるものでしょうか。
maisumakun

2021/05/24 01:43

3つのテーブルをJOINすればいいだけです(AとB、BとCの間で条件を設定できていれば、AとCに共通な列がなくてもなんら問題ありません)。
dreamers

2021/05/24 01:58

上記SELECT文そのままで、 SELECT (A).データベース名 と、することでで、Aテーブルのデータベース名「コンビニ一覧」を取得できるものでしょうか
maisumakun

2021/05/24 02:03 編集

AをJOINすれば可能です。そのままJOIN A ON A.database_id=B.database_idのように続けてください。
dreamers

2021/05/24 14:44

maisumakun様、お忙しい中、ご回答をありがとうございました。 よく、理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問