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

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

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

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

Java

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

Q&A

解決済

3回答

1147閲覧

テーブル抽出について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

Java

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

0グッド

1クリップ

投稿2015/10/27 09:56

編集2015/10/27 23:53

CentOS上で、JAVAで、MySQLを使っています。

SQL文を何度も組みなおして試行錯誤しているのですが、全く、思うように抽出できません。

下記のデータを抽出するSQL文を教えてください。

1.TABLE_Aは、条件に合ったものは、すべて抽出する。
2.TABLE_Bは、JSOIN?で、TABLE_Aの付属関連レコードの場合、抽出する。
3.TABLE_A は、id1+id2+id3でユニーク。
4.TABLE_A は、id1+id2+id3のレコードが複数ある。

関数のパラメーターに、id1=1, name=山田 を指定された場合、

TABLE_A
id1 id2 id3 name address delete_flag
1 1 1 山田 住所1 0 ←抽出
1 1 2 山田 住所2 1 ← 抽出しない
1 1 3 山田 住所3 0 ←抽出
1 2 1 松本 住所4 0
1 2 2 松本 住所5 0
1 3 1 小林 住所6 0
2 1 1 北村 住所7 0
2 1 2 北村 住所8 0
3 1 1 木下 住所9 0

TABLE_B
id1 id2 id3 file delete_flag update
1 1 1 file1 0 2015-11-01 12:21:31
1 1 1 file2 0 2015-11-01 12:21:32
1 1 1 file3 0 2015-11-03 12:21:31 ←最大日時を抽出
1 1 2 file3 0 2015-11-05 12:21:31
1 1 2 file3 0 2015-11-05 12:21:35
2 1 1 file1 0
2 1 2 file1 0
3 1 1 file1 0
3 1 1 file1 0

抽出結果
TABLE_A TABLE_B
id1 id2 id3 name address update
1 1 1 山田1 住所1 2015-11-03 12:21:31
1 1 3 山田3 住所3 null

お手数ですが、SQL文のご提供を頂ければ幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

質問が不正だったため、封鎖致します。ご回答いただいた皆様、貴重なお時間を本当に申し訳ございません。

投稿2015/10/27 23:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

前提の

2つのテーブル共、id1+id2+id3でユニーク。

がTABLE_Bにおいて満たされていませんが、
TABLE_AとTABLE_Bは1:Nの関係を持ち、TABLE_Bのid1~3はTABLE_Aを特定するためのフィールドである
という解釈で問題ありませんか?

であればこんな感じで行けるかと思います。

SQL

1SELECT 2`TABLE_A`.`id1`, 3`TABLE_A`.`id2`, 4`TABLE_A`.`id3`, 5`TABLE_A`.`name`, 6`TABLE_A`.`address`, 7`TABLE_B`.`update` 8FROM `TABLE_A`,`TABLE_B` 9WHERE `TABLE_A`.`delete_flag` = 0 10AND `TABLE_A`.`id1` = `TABLE_B`.`id1` 11AND `TABLE_A`.`id2` = `TABLE_B`.`id2` 12AND `TABLE_A`.`id3` = `TABLE_B`.`id3` 13ORDER BY `TABLE_B`.`update` DESC 14LIMIT 1 15コード

投稿2015/10/27 10:53

tanat

総合スコア18713

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

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

退会済みユーザー

退会済みユーザー

2015/10/27 11:12

ご回答ありがとうございます。 テーブルのユニークの表現の記述に誤記がありました。 大変申し訳ございません。
guest

0

こんばんわ。
以下のSQL文ではどうでしょうか?

SELECT
TABLE_A.id1,
TABLE_A.id2,
TABLE_A.id3,
TABLE_A.name,
TABLE_A.address,
MAX(TABLE_B.update)
FROM
TABLE_A LEFT OUTER JOIN TABLE_B ON (TABLE_A.id1 = TABLE_B.id1 AND TABLE_A.id2 = TABLE_B.id2 AND TABLE_A.id3 = TABLE_B.id3 )
WHERE
TABLE_A.delete_flag = 0
GROUP BY
TABLE_A.id1,
TABLE_A.id2,
TABLE_A.id3,
TABLE_A.name,
TABLE_A.address

投稿2015/10/27 10:48

srsnsts

総合スコア480

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

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

退会済みユーザー

退会済みユーザー

2015/10/27 11:13

ご回答ありがとうございます。 みなさんのSQL文の作成能力はすごいですね。 お詫びです。テーブルのユニークと記述に誤記があり、山田の番号は不要でした。 大変お手数をおかけしたのに申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問