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

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

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

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

Q&A

解決済

3回答

112344閲覧

joinで結合したテーブルの片方に複数レコードがある場合に、レコードが複数とれてしまう場合の対応について

GiveAHand

総合スコア286

SQL

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

0グッド

2クリップ

投稿2016/11/21 04:07

テーブルAとテーブルBをjoinで結合した場合、結合条件にあうデータが、テーブルBに複数存在する場合、結果が複数になってしまいます。

これをテーブルAの数分だけにするに、どうしたらいいのでしょうか?

ちなみに問題のSQLはこのようなものです。

SQL

1select 項目1, 項目2 2from テーブルA dg 3join テーブルB 4on テーブルA.項目1 = テーブルB.項目1 5and テーブルA.項目2 = テーブルB.項目2

テーブルA
項目1 項目2
aaa1 aaa2
bbb1 bbb2

テーブルB
項目1 項目2
aaa1 aaa2
aaa1 aaa2
ccc1 ccc2

結果
項目1 項目2
aaa1 aaa2
aaa1 aaa2

これを、

結果
項目1 項目2
aaa1 aaa2

こうなるようにしたい。

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

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

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

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

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

guest

回答3

4

ベストアンサー

SELECTの項目がテーブルAのみであるならば

sql

1select distinct テーブルA.項目1, テーブルA.項目2 2from テーブルA dg 3join テーブルB 4on テーブルA.項目1 = テーブルB.項目1 5and テーブルA.項目2 = テーブルB.項目2

投稿2016/11/21 04:14

A.Ichi

総合スコア4070

act823, miyabi-sun, GiveAHand, sirokuma5296👍を押しています

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

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

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

GiveAHand

2016/11/21 04:19

A.Ichi様 うまくいきました! ありがとうございました!
guest

2

SQL

1select 項目1, 項目2 2from テーブルA dg 3join テーブルB 4on テーブルA.項目1 = テーブルB.項目1 5and テーブルA.項目2 = テーブルB.項目2 6-- 以下を追加する 7group by テーブルA.項目1

注意点としてどちらが紐づくかは分かりません。
MySQLでは大抵紐付いた上から1レコード目のデータのみがとれます。


別解

SQL

1select distinct 項目1, 項目2 2from テーブルA dg 3join テーブルB 4on テーブルA.項目1 = テーブルB.項目1 5and テーブルA.項目2 = テーブルB.項目2

投稿2016/11/21 04:14

miyabi-sun

総合スコア21130

act823, GiveAHand👍を押しています

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

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

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

GiveAHand

2016/11/21 04:21

miyabi-sun様 ご回答ありがとうございます! あと、別解はうまくいきましたが、 一つ目の解は、 ORA-00979: not a GROUP BY expression というエラーが出てうまくいきませんでした(>_<)
guest

0

本来、集合の積ですから複数行になるのは当然です。

単に重複行を削除したいなら、

SQL

1SELECT DISTINCT 項目1,項目2 2...

と、DISTINCT 句を指定すれば結果から重複する行は除かれますが、そもそもテーブルA自体に重複行があった場合は、これではテーブルAの行数とは一致しなくなります。

投稿2016/11/21 04:28

tacsheaven

総合スコア13703

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

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

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.59%

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

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

質問する

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

SQL

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