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

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

ただいまの
回答率

91.11%

  • SQL

    1823questions

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

  • PostgreSQL

    776questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • JOIN

    17questions

    これはSQL文のJOINに関するタグです。リレーショナルデータベースシステムの二つ以上のテーブルを結合する際に、この構文が利用されます。

複数のテーブルを結合する方法について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 68

r.y.o

score 29

PostgreSQL(9.5)を用いたデータ取得で3つのテーブルを結合させた結果を取得したいのですが
うまくいかず悩んでおります。
ご指摘をいただけないかと思い書き込みしております。
どなたかヒントをいただけませんでしょうか。

<テーブル>
①Aテーブル
②Bテーブル
③Cテーブル
<カラム>
①A1、A2、A3・・・
②B1、B2、B3・・・
③C1、C2、C3・・・

上記のようなテーブル構成になっております。
この構成でA1=B1かつA3=C1という結合をしたいと思っています。

下記のようなSQLを書いてみたのですがSyntax Errorとなってしまいます。

SELECT
    A1,
    A2,
    A3
    B1,
    B2,
    B3,
    C1,
    C2,
    C3
FROM
    TableA inner join TableB on TableA.A1 = TableB.B1 
    TableA inner join TableC on TableA.A3 = TableC.C1
・
・
・
create table tableA (
  A1 int primary key,
  A2 varchar(80),
  A3 int
);
create table tableB (
  B1 int primary key,
  B2 varchar(80),
  B3 varchar(80)
);
create table tableC (
  C1 int primary key,
  C2 varchar(80),
  C3 varchar(80)
);
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kosuke_Shibuya

    2018/02/13 23:10

    この例じゃ、どのカラムで結合すればいいか、判断つかないでしょ?

    キャンセル

回答 3

checkベストアンサー

0

SELECT A.*, B.*, C.*
FROM tableA A
INNER JOIN tableB B
ON A.A1 = B.B1
INNER JOIN tableC C
ON A.A3 = C.C1
;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/13 23:08

    ご指摘いただきありがとうございます。

    キャンセル

  • 2018/02/13 23:15

    回答を修正しました。
    エラーメッセージは質問に表示された内容をそのまま提示した方が良いです。

    キャンセル

  • 2018/02/13 23:24

    ありがとうございます。
    エラーメッセージを控えることを忘れてしまい記憶だけで書いてしまい大変失礼いたしました。
    明日、ご教示いただいた方法を試してみたいと思います。

    キャンセル

0

同じ項目名が無い場合ではこれでもよろしいかと

select * from tableA, tableB, tableC
where A1=B1 and A3=C1;
create temp table tableA (
  A1 int primary key,
  A2 varchar(80),
  A3 int
);
create temp table tableB (
  B1 int primary key,
  B2 varchar(80),
  B3 varchar(80)
);
create temp table tableC (
  C1 int primary key,
  C2 varchar(80),
  C3 varchar(80)
);
insert into tableA values(1,'AAA',2),(2,'AA1',3),(3,'AA2',4);
insert into tableB values(1,'BBB','bbb'),(2,'BB2','bb2'),(3,'BB2','bb2');
insert into tableC values(2,'CCC','ccc'),(3,'CC3','cc3'),(4,'CC4','cc4');

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

回答いただいた方みなさまありがとうございました。
教えていただいた方法で無事にSQLを組むことが出来ました。
ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

ただいまの回答率

91.11%

関連した質問

  • 受付中

    SQL Updateに関する質問

    laravel5.2のmigrationでSQLを直接記述しDBをupdateすることが目的です。 仕様 ◯tableA -id -genre_id -large_g

  • 解決済

    総当たり戦表のデータベース設計について

    お世話になります。 現在、以下のような総当たり戦表のようなデータを保存するためのDBをMySQLで設計したいと考えています。 1つのチームに持たせたい情報 チー

  • 解決済

    MySQLで2種類のユーザーが記事を書く場合の設計

    MySQLを使ったウェブサイトで、管理ユーザー(admins)がブログ記事(articles)を書ける仕組みになっていて、articles.author_id と admins.i

  • 解決済

    関連性のある異なるテーブルのデータのスマートな取得

    前提・実現したいこと 以下の様なテーブル構成は一般的なテーブルケースで存在していると思います。 【社名】 id name 1 トヨタ 2 日産

  • 解決済

    別テーブルから取得した値でカラムの更新を行いたい

    前提・実現したいこと テーブルに持っているコードの体系が変わることにより、テーブルレイアウトの変更を 行うことになりました。 該当のテーブルには旧コード値を保持していて、レイ

  • 解決済

    MySQLのindexの張り方について

    下記のようなテーブルに5万件程度のデータが入っております。 データの中身ですが、映画のタイトル(日本語と英語)、登場人物が入力されております。 title_jp,title_en,

  • 受付中

    mysql 複数条件でのデータ抽出

    現在、Java EEでウェブアプリケーションを作成しています。 機能のひとつとして、二つのテーブルから必要なデータを取得し、それぞれを複数条件にかけて、新しいデータとしてテーブ

  • 解決済

    正規化とユーザの利用方法のバランス

    グループテーブルの中で、 学籍番号、クラス、出席番号というもの機能させようと思っています。 ユーザがエクセルファイルの挿入にて、ユーザがグループを登録していく場合、クラスと出席

同じタグがついた質問を見る

  • SQL

    1823questions

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

  • PostgreSQL

    776questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • JOIN

    17questions

    これはSQL文のJOINに関するタグです。リレーショナルデータベースシステムの二つ以上のテーブルを結合する際に、この構文が利用されます。