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

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

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

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

SQL

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

Q&A

解決済

2回答

426閲覧

[SQL]2つのテーブルを結合したい

aiai8976

総合スコア112

PostgreSQL

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

SQL

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

0グッド

0クリップ

投稿2020/06/15 10:20

編集2020/06/15 11:07

前提・実現したいこと

user_idが一致している場合BにAを結合したいのですが、SQLの書き方がわかりません。
以下のようにするとエラーになるのですが、どのようにかけばいいでしょうか。

SELECT user_id, name FROM B JOIN A ON B.user_id = A.user_id

###エラー

ERROR: syntax error at or near "JOIN" Position: 115

該当のソースコード

CREATE TABLE A (user_id INTEGER NOT NULL, name VARCHAR(100) NOT NULL, PRIMARY KEY (user_id)); BEGIN TRANSACTION; INSERT INTO A VALUES (1, '山田'); INSERT INTO A VALUES (2, '上田'); INSERT INTO A VALUES (3, '田中'); INSERT INTO A VALUES (4, '鈴木'); INSERT INTO A VALUES (5, '仲'); COMMIT; CREATE TABLE B (id INTEGER NOT NULL, user_id INTEGER NOT NULL, point INTEGER NOT NULL, PRIMARY KEY (id)); BEGIN TRANSACTION; INSERT INTO B VALUES (1, 1, 800); INSERT INTO B VALUES (2, 1, 1800); INSERT INTO B VALUES (3, 3, 250); INSERT INTO B VALUES (4, 4, 500); INSERT INTO B VALUES (5, 2, 500); INSERT INTO B VALUES (6, 5, 800); COMMIT;

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

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

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

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

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

sousuke

2020/06/15 10:24

SQLはRDMSによって色々方言があるのでなにか書いてタグに追加しましょう。 「以下のようにするとエラーになる」ならエラーメッセージを書きましょう。
aiai8976

2020/06/15 11:07

すみません。追加したので確認お願いします。
guest

回答2

0

ベストアンサー

2つのテーブルの列を使っていますから、同じ列名がある時はどっちのテーブルの列なのか明示してあげないとコンピュータが困ってしまいます。
システムの保守をちょっと容易にするためにAテーブルにしか存在しないnameもA.name って明示しておきます。

SQL

1-- 同じuser_id が両方のテーブルにあるデータのみ出力したい時、 2SELECT B.user_id, A.name FROM B INNER JOIN A ON B.user_id = A.user_id; 3 4-- user_id がBテーブルにデータがあるが、Aテーブルにデータがない場合も、 5SELECT B.user_id, A.name FROM B LEFT OUTER JOIN A ON B.user_id = A.user_id;

投稿2020/06/15 11:39

Orlofsky

総合スコア16415

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

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

0

こうかな~このSQLでなにがしたいのかは不明ですが

sql

1SELECT A.user_id, A.name FROM B JOIN A ON B.user_id = A.user_id

投稿2020/06/15 10:26

sousuke

総合スコア3828

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

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

aiai8976

2020/06/15 11:08

試してみましたが、エラーが出ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問