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

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

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

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

Q&A

解決済

3回答

435閲覧

MySQLでのSELECT文の書き方

coco1234

総合スコア11

MySQL

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

0グッド

0クリップ

投稿2020/08/14 05:53

MySQL 5.5.62 を使用しています。

例えば以下のようなテーブルについて、
「tagに"あああ"の無いnameのリスト」が得たいとします。

idnametag
1Aあああ
2Aいいい
3Bううう
4Bえええ
5Cおおお

この場合、欲しい結果は

B C

です。

例えば

SELECT DISTINCT name FROM table WHERE tag !="あああ";

のように書いたとしても、id=2の行があるため、結果は[A B C]となってしまいます。

この目的を満たせるような良いSELECT文の書き方は無いでしょうか?

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

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

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

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

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

guest

回答3

0

not existsでも取得できます。

SQL

1SELECT DISTINCT name FROM table t1 2WHERE not exists(select 1 from table where name=t1.name and tag ='あああ')

以下の様にすると若干高速かもしれません。

SQL

1select * from ( 2 SELECT DISTINCT name FROM table 3) t1 4WHERE not exists(select 1 from table where name=t1.name and tag ='あああ')

投稿2020/08/14 06:36

編集2020/08/15 02:23
sazi

総合スコア25195

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

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

coco1234

2020/08/14 06:46

not existsも知識が無かったので分からなかったのですが、 使い方を調べてみたら目的は果たせそうです。 どうもありがとうございました。
guest

0

ベストアンサー

NOT INの中で'あああ'を指定すれば除外できると思います。

SQL

1 2CREATE TABLE test 3 (`id` int, `name` varchar(1), `tag` varchar(3)); 4INSERT INTO test 5 (`id`, `name`, `tag`) 6VALUES 7 (1, 'A', 'あああ'), 8 (2, 'A', 'いいい'), 9 (3, 'B', 'ううう'), 10 (4, 'B', 'えええ'), 11 (5, 'C', 'おおお') 12; 13 14SELECT t1.name 15FROM test t1 16WHERE t1.name NOT IN ( 17 SELECT t2.name 18 FROM test t2 19 WHERE t2.tag = 'あああ' 20) 21GROUP BY t1.name

投稿2020/08/14 06:04

azagomarashi

総合スコア13

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

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

coco1234

2020/08/14 06:17

なるほど、確かにその通りですね。 試してみます。ありがとうございました。
guest

0

こんな感じでは?

SQL

1create table tbl(id int primary key,name varchar(10),tag varchar(10)); 2insert into tbl values 3(1,'A','あああ'), 4(2,'A','いいい'), 5(3,'B','ううう'), 6(4,'B','えええ'), 7(5,'C','おおお'); 8 9select name from tbl 10group by name 11having sum(tag='あああ')=0

投稿2020/08/14 15:51

yambejp

総合スコア114843

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

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

coco1234

2020/08/17 01:53

なるほど、group byとhaving句を組み合わせる方法もあるのですか。 これも試してみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問