🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

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

Q&A

解決済

3回答

119282閲覧

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

0

ベストアンサー

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

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

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

GiveAHand

2016/11/21 04:19

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

0

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

総合スコア21203

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

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

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.36%

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

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

質問する

関連した質問