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

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

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

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

SQL

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

Q&A

解決済

1回答

804閲覧

テーブル内の列の組み合わせで重複データを抽出したい

mik_2528

総合スコア9

MySQL

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

SQL

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

0グッド

0クリップ

投稿2021/10/05 04:52

MySQL(version:5.7)
以下のテーブルがあります。

商品テーブル(variety_item)
+----------------+--------+-----+--------+----+-------+
|variety_item_id|item_id| name |name_id|size|size_id|
| 12345 | 1 |新りんご| n01 | S | s01 |
| 12345 | 2 |新みかん| n02 | S | s01 |
| 12345 | 3 |りんご | n01 | S | s01 |
| 12345 | 4 |みかん | n02 | S | s01 |
| 12345 | 5 |りんご | n01 | M | s02 |
| 12345 | 6 |みかん | n02 | M | s02 |
| 99999 | 7 |にんじん| n01 | S | s01 |
| 99999 | 8 |じゃがいも| n02 | S | s01 |
| 99999 | 9 |玉ねぎ | n03 | S | s01 |
+----------------+--------+-----+--------+----+-------+

実現したいこと
variety_item_idごとにname_idとsize_idの組み合わせで重複している値を抽出したい。
結果↓
+----------------+--------+-----+--------+----+-------+
|variety_item_id|item_id| name |name_id|size|size_id|
| 12345 | 1 |新りんご| n01 | S | s01 |
| 12345 | 2 |新みかん| n02 | S | s01 |
| 12345 | 3 |りんご | n01 | S | s01 |
| 12345 | 4 |みかん | n02 | S | s01 |
+----------------+--------+-----+--------+----+-------+

以下を参考にクエリを作成しましたが、うまくいきませんでした。
https://colo-ri.jp/develop/2013/01/sql-listup-duplicate-datas-rows.html

SELECT * FROM variety_item t1 INNER JOIN variety_item t2 ON ( t1.variety_item_id = t2.variety_item_id ) WHERE t1.name_id <=> t2.name_id AND t1.size_id <=> t2.size_id;

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

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

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

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

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

guest

回答1

0

ベストアンサー

variety_item_idごとにname_idとsize_idの組み合わせで重複している値を抽出したい。

以下でどうでしょう。

SQL

1SELECT * FROM variety_item 2WHERE ( variety_item_id, name_id, size_id ) 3 IN ( 4 SELECT variety_item_id 5 , name_id 6 , size_id 7 FROM variety_item 8 GROUP BY variety_item_id 9 , name_id 10 , size_id 11 HAVING count( distinct item_id ) > 1 12 ) 13; 14 15-- サブクエリと結合しても同じ結果になります 16 17SELECT x.* FROM variety_item x 18JOIN 19( 20 SELECT variety_item_id 21 , name_id 22 , size_id 23 FROM variety_item 24 GROUP BY variety_item_id 25 , name_id 26 , size_id 27 HAVING count( distinct item_id ) > 1 28) y 29USING ( variety_item_id, name_id, size_id ) 30;

投稿2021/10/06 11:40

編集2021/10/06 11:59
mayu-

総合スコア335

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問