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

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

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

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

SQL

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

Q&A

3回答

3446閲覧

DBから取得した2つのデータをマージする方法について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

SQL

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

0グッド

0クリップ

投稿2016/08/05 00:34

###前提・実現したいこと

会社でjavaを研修中(2か月)のものです。
現在、以下の課題を解いているのですが、①と②までは解けたものの、
③の取得したそれぞれのデータをマージする方法がよくわからないです。
①と②はそれぞれDBから取ってきた値をlistに入れ、for文で回しています。
上司のアドバイスではcomparatorを使うといいらしいですが・・・。
ちなみに、マージは取扱店, 取扱者, 支店コード, CYKEYの順です。
ネットで検索したところorder byの順にマージする方法がなかったので、
どなたかヒントをいただけると助かります。
よろしくお願いします。

① com & hp からデータを取得し、配列にセットする。
select com.証券番号 , hp.取扱店 , hp.取扱者 , hp.団体コード ,
com.申込日 , com.始期日 , com.始期時刻区分, com.始期時刻 ,
com.終期日 , com.保険期間 , com.保険種類 , hp.新継区分 ,
hp.共保精算区分, hp.代分幹事区分 , hp.代分精算区分 , hp.質権 ,
hp.証券発送区分, hp.分担表証券添付, hp.証券写枚数 , hp.控除証明発送区分,
hp.送付先変更 , com.送信日
from J3申込書共通 com, J3申込書ホームプラス hp
where com.状態フラグ = '2'
and com.保険種類 in ('0018')
and com.CYKEY = hp.CYKEY
order by hp.取扱店, hp.取扱者, com.支店コード, com.CYKEY

② com & jj からデータを取得し、配列にセットする。
select com.証券番号 , jj.取扱店 , jj.取扱者 , jj.団体コード ,
com.申込日 , com.始期日 , com.始期時刻区分, com.始期時刻 ,
com.終期日 , com.保険期間 , com.保険種類 , jj.新継区分 ,
jj.共保精算区分, jj.代分幹事区分 , jj.代分精算区分 , jj.質権 ,
jj.証券発送区分, jj.分担表証書添付, jj.証券写枚数 , jj.控除証明発送区分,
jj.送付先変更 , com.送信日
from J3申込書共通 com, J3申込書住宅総合 jj
where com.状態フラグ = '2'
and com.保険種類 in ('0002', '0003')
and com.CYKEY = jj.CYKEY
order by jj.取扱店, jj.取扱者, com.支店コード, com.CYKEY

③ ①で取得したデータと②で取得したデータをマージする(マージソート)。

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

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

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

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

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

asahina_dev

2016/08/05 01:04

UNION JOIN のことをいってるきがするが ①と②のテーブルを横に並べるんではなくて
退会済みユーザー

退会済みユーザー

2016/08/05 01:27

ありがとうございます。 UNION JOINについて調べてみます。
kunai

2016/08/05 01:42

社内で与えられた課題であれば、社内の方に相談した方が良いと思います。 それによって、相談を受けた方もあなたの理解度を知る事が出来るし、業務上のコミュニケーションを取る事が出来る。 そういうやり取りってとても大事なんですよ。
shoota

2016/08/05 02:46

「わからないことの情報を整理し、上司に伝え、もらったアドバイスを自分のなかで消化する」 という研修とみた
退会済みユーザー

退会済みユーザー

2016/08/05 03:13

そうですよね。 本日は上司が不在で社内で自習なのですが、他の研修生もそれぞれの研修課題で悩んでいるため聞きづらく・・・。 ありがとうございます。
kunai

2016/08/05 04:14

上司に答えやヒントを聞くのではなく、答えを知らない同僚(他の研修生)と「相談」をするのも大事なコミュニケーションです。 答えに直結する回答が得られなくとも、課題へのアプローチの仕方(考え方等)を共有する事が出来、発見もあると思います。 実務を行う上では上司への相談よりもチームメンバーで解決を図るのが一般的かと思いますので、普段から同僚間で相談しあう環境づくりも大事です。 AさんはDB関連に強い、Bさんはサーバ設定に詳しい、Cさんはプログラムは苦手だけど、仕様を図解したりするのがうまい、等、それぞれの個性も把握できていきますので、とにかく話をするのはとても大事です。 こういうところで質問するのは、実務として差し迫った納期があったり、本番環境で不具合が発生していたり、解決の過程よりまず結果を要する場合にとどめておいた方がいいと思います。
退会済みユーザー

退会済みユーザー

2016/08/05 07:15

はい、頑張って他の研修生と答えを導き出せるようにします。 ありがとうございます。
guest

回答3

0

UNION と UNION ALL集合演算子
UNION と UNION ALLの違い
はきちんと理解しておいてください。SQLの学習をおろそかにする人が多いです。

投稿2016/08/06 03:21

Orlofsky

総合スコア16415

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

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

0

javaは全く触ったことないですが、SQLの操作は共通しているものとして考えます。そして、やりたいことはテーブルのマージとのことですが、ここでJOINという手段とUNIONという手段の2つが思いつきます。

この2つ、似ているようで全く違います。JOINはテーブルの結合を行うためのもので、どんなときに使うかというと、まるで構造の異なるテーブルAとテーブルBに対し、共通のIDなどでひも付けて、それぞれ欲しい行を取得します。わかりやすく言えば、テーブルA(商品ID、商品名、商品原価)、テーブルB(商品ID、売上日、売上個数)となっていて、商品名と売上個数が欲しい場合などです。

対してUNIONというのは集合演算で、2つのテーブルを合体させます。なので、テーブルの構造が同じ(厳密には異なりますが)状態でないとできません。

あと、マージソートはソートを行う際のプログラムの考え方に関係するもので、今回は全く考える必要ありません。SQLのソートはORDER BYのみが担当します。

投稿2016/08/05 07:05

編集2016/08/05 07:10
FKM

総合スコア3635

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

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

退会済みユーザー

退会済みユーザー

2016/08/05 07:21

まだ途中ですが、以下のようにしました。 hp.分担表証券添付とjj.分担表証券添付が似ているようで別のものだったので、nullを使って補っています。 ただ、研修の意図はSQLでorder byを使うのではなくではなくjava上のアルゴリズムでソートするような気がするので引き続き頑張ってみます。 select com.証券番号 , hp.取扱店 , hp.取扱者 , hp.団体コード , com.申込日 , com.始期日 , com.始期時刻区分 , com.始期時刻 , com.終期日 , com.保険期間 , com.保険種類 , hp.新継区分 , hp.共保精算区分 , hp.代分幹事区分 , hp.代分精算区分 , hp.質権 , hp.証券発送区分 , hp.分担表証券添付, null as 分担表証券添付, hp.証券写枚数 , hp.控除証明発送区分, hp.送付先変更 , com.送信日 from J3申込書共通 com, J3申込書ホームプラス hp where com.状態フラグ = '2' and com.保険種類 in ('0018') and com.CYKEY = hp.CYKEY union select com.証券番号 , jj.取扱店 , jj.取扱者 , jj.団体コード , com.申込日 , com.始期日 , com.始期時刻区分 , com.始期時刻 , com.終期日 , com.保険期間 , com.保険種類 , jj.新継区分 , jj.共保精算区分 , jj.代分幹事区分 , jj.代分精算区分 , jj.質権 , jj.証券発送区分 , null , jj.分担表証書添付 , jj.証券写枚数 , jj.控除証明発送区分,jj.送付先変更 , com.送信日 from J3申込書共通 com, J3申込書住宅総合 jj where com.状態フラグ = '2' and com.保険種類 in ('0002', '0003') and com.CYKEY = jj.CYKEY
guest

0

マージソートを行うことをマージするとは言わないような。

いきなり本題から入らず「Java ArrayList マージソート」で検索しましょうね。
たぶん、どこに問題があるかを把握することとどうやって解決するかが研修の評価になるので具体的なプログラムは自分で考えましょう。

投稿2016/08/05 02:51

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2016/08/05 03:18

なるほど。 確かに問題は漠然としているので答えは何通りもあるように思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問