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

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

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

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

Q&A

解決済

3回答

1475閲覧

MySQL(ver4.1)のSELECT文について

cfu0987_APV

総合スコア15

MySQL

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

0グッド

0クリップ

投稿2016/02/24 14:13

MySQL(ver4.1)のSELECT文で質問します。
2つのテーブルAとBがあるとして、Bのテーブルから条件を指定して抽出し、抽出した結果とテーブルAを結合したいのですが、これを1つのSELECT文で実現する方法はあるのでしょうか。もしあれば、どのように実現できるのか教えてください。よろしくお願いいたします。

例:
テ-ブルA
Code name


100 red
110 blue
120 green
130 yellow
140 black
150 white

テーブルB
Code_B name_B date ea


100 red 201512 2
100 red 201601 6
120 green 201602 8
140 black 201602 1
150 white 201601 3

テーブルBのdateが'201602'の行だけを抽出しテーブルAと結合させる。
(データがないテーブルAの項目は空欄にする)
結果:
Code name date ea


100 red
110 blue
120 green 201602 8
130 yellow
140 black 201602 1
150 white

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

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

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

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

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

guest

回答3

0

手元に環境がないのですが、これでいけると思います。

SQL

1SELECT 2Code, A.name, date, ea 3FROM テーブルA A 4LEFT JOIN テーブルB B 5ON A.Code = B.Code_B AND B.date = '201602'

「データがないテーブルAの項目は空欄にする」がNULLでは困る場合はCOALESCE関数などで変換するとよいでしょう。

投稿2016/02/24 14:36

dupont_kedama

総合スコア925

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

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

0

ベストアンサー

SQL文に関しては先の回答者のご回答で解決できるかと思います。
それをご自分で作成できるようになるためのヒントになればと思い、
記述させていただきます。

おそらく質問者様は
SELECT文にWHERE句などで条件抽出してデータを取得する事は理解されているのだと思います。
それでテーブルA、テーブルBの個別の抽出できているでしょう。

でも実際にやりたいことは「2つ(以上)の抽出結果を一つにする」ことだと思います。
それを実現するのがJOIN句とUNION句です。

UNION句は縦方向にデータをつなげる方法で、行数が増えるイメージです。
今回の質問にはそぐわないものです。

対してJOIN句は横方向にデータ(テーブル)をつなげる方法で、項目が増えるイメージです。
JOIN句は繋げ方によっていくつかパターンが存在します。
下記を調べてみてください。
「INNER JOIN / LEFT (OUTER) JOIN / RIGHT (OUTER) JOIN / FULL OUTER JOIN」

このJOIN句を用いると二つのテーブルやクエリ結果をつなげることができます。

繋げる対象をクエリにしたい場合はサブクエリ(副問い合わせ)を用います。
サブクエリはFROM [テーブル]やJOIN句のテーブル指定の部分にSQL文(SELECT文など)を指定することです。

logsさんの回答を引用すると、下記のようになります。

SELECT A.Code, A.name, B.date, B.ea FROM テ-ブルA AS A -- JOIN句の始まり LEFT JOIN (SELECT * FROM テ-ブルB WHERE date ='201602') AS B -- 括弧内がサブクエリ ON A.Code = B.Code_B -- JOIN句の終わり ;

以上、ご参考になりますでしょうか?

投稿2016/02/25 05:20

Aeona

総合スコア396

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

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

cfu0987_APV

2016/02/25 10:56

詳細な説明ありがとうございました。 無事やりたいことが実現できました。
guest

0

sql

1SELECT 2 A.Code, A.name, B.date, B.ea FROM テ-ブルA AS A 3LEFT JOIN 4 (SELECT * FROM テ-ブルB WHERE date ='201602') AS B 5 ON A.Code = B.Code_B 6;

こちらではないでしょうか。

投稿2016/02/24 15:00

logs

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問