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

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

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

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

Q&A

解決済

2回答

3080閲覧

mysql 重複していなく1つしか登録されていないデータを取得したい

BeATWAVE

総合スコア5

MySQL

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

1グッド

0クリップ

投稿2018/05/16 16:20

id野菜
1トマト
1きゅうり
2きゅうり
3レタス
3きゅうり
3きゃべつ
4トマト
5トマト
5きゃべつ
6きゅうり

上記のようなテーブルで、「きゅうり」1つだけしか登録していないidを取得したいのですが、どのように書いたらよいかわかりません。ご指導のほどよろしくお願いいたします。(この場合id2と6を取得したい)

Do_you_1isten👍を押しています

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

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

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

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

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

guest

回答2

0

SQL

1select * from テーブル 2where id in ( 3 select id from テーブル 4 group by id having count(*)=1 5 )

追記

SQL

1select * from テーブル 2where id in ( 3 select id from テーブル 4 group by id 5 having sum(case when 野菜='きゅうり' then 1 end)=1 6 )

投稿2018/05/16 16:48

編集2018/05/17 02:45
sazi

総合スコア25184

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

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

BeATWAVE

2018/05/17 02:04

ご回答ありがとうございました。これですと、1つのものは取得できますが、きゅうり1つだけには対応していませんでした。
sazi

2018/05/17 02:24

野菜の名前も条件だったのですね。 追記しておきました。
sazi

2018/05/17 02:32

havingで条件にするより、where条件のほうがgroup byより絞り込みを先に行うので、インデックスなどがあると高速な場合が多いです。
sazi

2018/05/17 02:48 編集

要件満たしていなかったので追記を修正しました。 where条件についてのコメントはその通りなんですが、今回の要件には関係なかったですね。 修正したら、yambejpさんと同じでした(汗)
BeATWAVE

2018/05/17 02:59

今度は、きゅうりのIDは取得できたのですが、きゅうりをもってる全てのIDが取得されて、きゅうり1つだけしか持っていないIDの取得は出来ませんでした。度々、お手数をおかけいたしまして申し訳ありませんでした。
sazi

2018/05/17 03:01

それも結局yambejpさんと同じになるので割愛してましたすみません。
BeATWAVE

2018/05/17 03:07

whereを使ったほうが高速になる場合があるとかはまだまだ勉強不足で知りませんでした。 勉強になりました。ありがとうございました。
guest

0

ベストアンサー

  • 元データ

SQL

1create table tbl (id int,yasai varchar(10)); 2insert into tbl values 3(1,'トマト'), 4(1,'きゅうり'), 5(2,'きゅうり'), 6(3,'レタス'), 7(3,'きゅうり'), 8(3,'きゃべつ'), 9(4,'トマト'), 10(5,'トマト'), 11(5,'きゃべつ'), 12(6,'きゅうり'), 13(7,'きゅうり'), 14(7,'きゅうり');
  • 検索
select id from tbl group by id having sum(yasai='きゅうり')=1 and sum(yasai!='きゅうり')=0

ちなみに「きゅうりしか含まない」となると

select id from tbl group by id having sum(yasai='きゅうり')>0 and sum(yasai!='きゅうり')=0

投稿2018/05/17 01:28

編集2018/05/17 01:32
yambejp

総合スコア114814

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

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

BeATWAVE

2018/05/17 02:02

ご回答ありがとうございました。まさにこれがやりたかったのです。havingの使い方がいまいち解っていなくて、、、これから勉強したいと思います。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問