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

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

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

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Java

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

SQL

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

Q&A

解決済

3回答

1576閲覧

javaでわからない個所があるので教えていただきたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Java

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

SQL

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

0グッド

0クリップ

投稿2015/11/16 10:19

javaを覚え始めたばかりのため、調べてもよくわからなかったのですが…

①ある条件でSQLを実行し、結果をList型に格納します。(戻り値としてはList<Map<String, String>>になります。)
②その後、別の条件で先ほどの条件で抽出できなかった結果を含めて抽出したいためSQLを実行し、結果を同じ型で格納します。

①で取得したListに②で取得したListが重複していないものは①のリストに追加をして戻したいと考えています。

よい方法など知っている方がいましたら、知恵をお貸しください。

言語はJava
SQLはSQL Server
になります。

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

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

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

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

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

guest

回答3

0

ベストアンサー

知りたい内容はこちらのものと変わらないですよね?
https://teratail.com/questions/20240

私もanonymouskawaさんと同意見で、SQL一回で事が済むと考えてますが
SQL二回実行して結果をマージするのでしたら以下のようになるかと思います。
※MapのKeyにはテーブルのカラム名、Valueには対象値が入る想定です。

Java

1List<Map<String, String>> mapList1 = SQL実行結果1; 2List<Map<String, String>> mapList2 = SQL実行結果2; // SQL実行結果1の内容一部も取得される? 3List<String> valueList = new ArrayList<String>(); // 主キー項目の値を保持するリスト 4if (mapList2 != null && mapList2.size() > 0) { // SQL実行結果2が空以外の場合 5 for (Map<String, String> m : mapList1) { 6 valueList.add(m.get("主キーのカラム名")); // 主キーの値を保持 7 } 8} 9for (Map<String, String> m : mapList2) { 10 String s = m.get("主キーのカラム名"); 11 if (!valueList.contains(s)) { // SQL実行結果1の主キーの値を保持したリストに存在しなかった場合 12 mapList1.add(m); 13 } 14}

間違ってたらすみません。

hiroki8080さんの回答にもありますように
②の結果に①の結果と重複するレコードが存在しない場合はaddAllで追加できます。

投稿2015/11/16 11:23

編集2015/11/16 11:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

SQL文を見ないと何とも言えないのですが、
パフォーマンスを度外視していいなら、SQL文をUNIONでくっつけちゃえば良いんじゃないでしょうか。


まず、SQLを教えてください。
そして、テーブルの件数とか、性能劣化にならないかどうか判断が付く情報をください。

また、入れ物はMapをListであってますか?
部分的で良いので、そのSQL文とSQLを実行するJavaコードを書いてくれるとわかりやすいです。

投稿2015/11/16 11:02

編集2015/11/16 11:12
anonymouskawa

総合スコア856

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

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

0

初めから②を実行すれば良いような気がします!

投稿2015/11/16 10:48

hiroki8080

総合スコア254

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

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

退会済みユーザー

退会済みユーザー

2015/11/16 10:50

②では抽出できない結果が①に含まれるので、①と②を両方実行しないと正常結果が得られないのです><
hiroki8080

2015/11/16 11:26

なるほど、それなら他の方が書かれているようにSQLの書き方で①と②を一度に取ってくるか、ListのaddAllを使って追加する方法が良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問