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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

3045閲覧

2つのまったく違うテーブルをJYOINし、日付でソートする方法

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/08/22 12:12

編集2015/08/22 23:53

MySQLで、Javaを使っています。

SQL文が組めなくて困っています。

抽出したいのは、下記の2つのテーブルの項目を横にJOINし、
両方のテーブルの全項目を取得するのですが、

条件として、
両方のテーブルの持っている update_time(datetime型)の大きい順に抽出したいのです。
どのようなSQL文を組めばよろしいでしょうか?

注意点としましては、
bookテーブルは必ず優先して存在するレコードを抽出したいのですが、
interview_bookは、画面で、bookテーブル情報を登録するときに、
10回に1回くらいしか登録しないので、レコード数が違います。

従って、JOINしても、bookテーブル側にはレコードがあるが、
interview_book側には、レコードがない状態が、
ほとんどです。10分の1くらい。

■追記 8/23 08:53
その場合は、interview_book.company_id = null とかですと、
この後の、データ処理で、interview_book側には、レコードが無いんだ!!と
わかりやすいので、そのような配慮もいただけるとうれしいです。

String strSQL =
"SELECT * FROM book"

  • " WHERE"
  • " (book_id = " + iPara_book_id + ")" // 本ID
  • " AND (company_id = " + iPara_company_id + ")" // 会社ID
  • " AND (customer_id = " + iPara_customer_id + ")" // 顧客ID
  • " AND (delete_flag = false)" // レコード削除フラグ
  • " ORDER BY visit_date DESC" // 一番最近のレコード順
  • " LIMIT " + 100; // 抽出レコード数を制限

String strSQL =
"SELECT * FROM interview_book"

  • " WHERE"
  • " (company_id = " + iPara_company_id + ")" // 会社ID
  • " AND (customer_id = " + iPara_customer_id + ")" // 顧客ID
  • " AND (book_od = " + iPara_book_id + ")" // 本ID
  • " AND (base_id = " + iPara_base_id + ")" // 基本か特殊か?
  • " AND (module_type != 0)" // モジュール種類
  • " AND (delete_flag = false)"; // レコード削除フラグ
  • " LIMIT " + 100; // 抽出レコード数を制限

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2015/08/22 12:34

回答作る上で楽だし、正確な回答が期待できますので、それぞれCREATE文を追記してください。
退会済みユーザー

退会済みユーザー

2015/08/22 23:49

ご回答ありがとうございます。 簡単ですか...、私にとっては、とても難しいので、すごくお恥ずかしいです。 簡単なら、自分で考えろということですね。 言わんとしているように自分で、今日一日か、2,3日かけて考えます。 ★もしくは、他の方のSQLの書き込みを期待させていただきます。せっかくこの質問掲示板があるので、気軽に答えてくださる方がいらっしゃれば、それに期待いたします。 書き込み、お手数をおかけいました。
退会済みユーザー

退会済みユーザー

2015/08/23 05:11

???テーブルの定義を追記してと言ってるだけですよ。
guest

回答3

0

ベストアンサー

再度、自分で、考慮しなおし、不明な場合、ご質問させていただきます。
皆さまには、大変お手数をおかけし、申し訳ございませんでした。

投稿2015/08/23 01:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

外部結合すればよいのではないでしょうか?

SQL

1SELECT 2 * 3FROM 4 book LEFT OUTER JOIN interview_book 5 ON book.book_id = interview_book.book_id

投稿2015/08/23 00:24

toru81

総合スコア170

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

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

0

一般的なJOIN(テーブル結合)の例です。

sql

1SELECT 2 * 3FROM 4 book INNER JOIN interview_book 5 ON book.[key_column] = interview_book.[key_coloum] 6ORDER BY 7 [sort_column];

ですが、、質問者さまがおっしゃっていることは2つSQLで別々でとってきたものを、合わせて並べかえて表示したいのでしょうか?その場合はUNION(または、UNION ALL)を利用します。

sql

1SELECT 2 * 3FROM ( 4SELECT 5 book_id 6 , update_time 7FROM 8 book 9WHERE 10 book_id = xxxx 11UION 12SELECT 13 book_id 14 , update_time 15FROM 16 interview_book 17WHERE 18 book_id = xxxx 19) AS books 20ORDER BY 21 update_time 22;

投稿2015/08/23 00:07

編集2015/08/23 00:10
redpanda

総合スコア123

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問