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

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

ただいまの
回答率

90.52%

  • SQL

    2386questions

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

  • SQLite

    619questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLで最大値を求めつつINNER JOIN

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 550

okhuzs

score 1

 前提・実現したいこと

SQLITE3でSQLの学習をしている初学者です。
複数のテーブルからデータを結合し以下のような結果を得れるSQL文を作ろうとしています。

ID name url end(最大値) title
1 mySQL www.oracle.com 201604181900 mySQL tutorial part5
2 oracleDB www.oracle.com 201604161300 step up oracle lesson3
3 PostgreSQL www.postgresql.com 201604151300 PostgreSQL for beginner part2

 各テーブル

テーブル名:DB_LIST

ID name type
1 mySQL RDBMS
2 oracleDB RDBMS
3 PostgreSQL RDBMS

テーブル名:DB_official

name url
mySQL www.oracle.com
oracleDB www.oracle.com
PostgreSQL www.postgresql.com

テーブル名:show_schedule

start end name title summary
201604141800 201604141900 mySQL mySQL tutorial part1 what's SQL
201604151800 201604151900 mySQL mySQL tutorial part2 what's table
201604161800 201604161900 mySQL mySQL tutorial part3 what's field
201604171800 201604171900 mySQL mySQL tutorial part4 what's CREATE
201604181800 201604181900 mySQL mySQL tutorial part5 what's INSERT
201604141200 201604141300 oracleDB step oracle lesson1 how use INSERT
201604151200 201604151300 oracleDB step oracle lesson2 how use SELECT
201604161200 201604161300 oracleDB step oracle lesson3 how use DELETE
201604141200 201604141300 PostgreSQL PostgreSQL for beginner part1 noSQL
201604151200 201604151300 PostgreSQL PostgreSQL for beginner part2 RDMBS

startとendはINTEGERでその他はTEXTで宣言しています。

 試したこと

その1

SELECT DB_list.ID,DB_list.name,DB_official.url FROM DB_list INNER JOIN DB_official ON DB_list.name = DB_official.name;
ID name url
1 mySQL www.oracle.com
2 oracleDB www.oracle.com
3 PostgreSQL www.postgresql.com

DB_LISTとDB_officialの合成が出来た。

その2

SELECT end, name, title FROM show_schedule AS m
WHERE end = (
    SELECT max(end)
    FROM show_schedule AS s
    WHERE m.name = s.name
    )
end name title
201604181900 mySQL mySQL tutorial part5
201604161300 oracleDB step up oracle lesson3
201604151300 PostgreSQL PostgreSQL for beginner part2

show_scheduleからnameで括りendの最大値を求めることが出来た。

 質問

その1とその2のSQL文を合体できれば実現出来そうな気がするのですが、その方法がわかりません。ご教授お願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+2

その1とその2のSQL文を合体できれば実現出来そうな気がするのですが

正にその通りです。

SELECT DB_list.ID,DB_list.name, m.end, DB_official.url 
FROM DB_list INNER JOIN DB_official ON DB_list.name = DB_official.name
     inner join show_schedule m on ON DB_list.name = m.name
WHERE end = (
        SELECT max(end)
        FROM show_schedule AS s
        WHERE m.name = s.name
      )

1.必要な情報を持つテーブルを集める(結合する)。
2.必要な行のみにするため、フィルターする(where条件を指定する)。
のような手順で考えると、イメージしやすいのではないでしょうか。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/16 16:33

    ありがとございます。意図した結果が得られました。

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • SQL

    2386questions

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

  • SQLite

    619questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。