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

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

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

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

Q&A

解決済

3回答

4725閲覧

[MySQL]同カラムから複数条件に合致するデータを取得したい

entaro12345

総合スコア75

MySQL

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

0グッド

1クリップ

投稿2021/06/20 02:52

編集2021/06/20 04:31

前提・実現したいこと

出来る限り少ないステップでデータ取得をしたいと考えています。
MySQLにて特定のカラムから複数の条件が合致するデータを取得したいです。
union句を使用するのかなと思っているのですが、イマイチ理解できておらず質問させていただきました。
下記のようなデータがあり、同じ[Acode]列で [Aname]列が"テストA"と"テストD"どちらも含む場合のデータのみを取得したいです。

AcodeBcodeAname
001001テストA
001002テストB
001003テストC
001004テストD
001005テストE
002001テストA
002002テストB
002003テストC
002004テストE
003001テストA
003002テストD
003003テストG
004001テストH

取得したいデータ:

AcodeBcodeAname
001001テストA
001004テストD
003001テストA
003002テストD

ご教示いただけますと幸いです。

※下記だと、片方だけでも含まれているものが抽出されるということは理解してます。

SQL

1select Acode, Bcode, Aname 2from テーブル 3where Aname in ("テストA", "テストD")

※下記のような感じでできないのかなと模索してます。

SQL

1select Acode, Bcode, Aname 2from テーブル 3where Aname = "テストA" 4union 5select Acode, Bcode, Aname 6from テーブル 7where Aname = "テストD"

補足情報(FW/ツールのバージョンなど)

MySQL

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

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

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

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

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

Crimson_Tide

2021/06/20 03:40

union句をどのように使う想定でしょうか。誤っていてもいいので「こんな感じのSQL文で試してみたが、エラーになる/結果が想定と違う」といった旨の記載があれば、いやいやそうじゃなくてこうですよと回答が付きやすいかと思います。 また、テストA だけが含まれる データの取得方法はご存じでしょうか。 同様にその場合のSQL文を提示していただき、「テストAだけであればこういうSQLで取得できるのですが、テストA、テストDどちらかが含まれる場合のSQLがわかりません。」とすると回答を受けやすいかと思います。 これによって、entaro12345さんがどこまでわかっているのかが明確になって、回答もentaro12345さんがわかっている余計な説明をする必要がなくなります。
entaro12345

2021/06/20 04:03

Crimson_Tideさま アドバイスありがとうございます。 現在、わかっているSQL等を追記しましたのでご確認いただけますと幸いです。
Crimson_Tide

2021/06/20 04:09

select Acode, Bcode, Aname from テーブル where Aname in ("テストA", "テストD") これ実行されましたか? これで想定した結果になるように思われますがどうでしょうか。 ただ「"」が「’」のような気がしますが、「"」でも問題ないのか その点についてはわかりかねます。 エラーがでるようなら 「’」で試してみてください。
entaro12345

2021/06/20 04:13

実行いたしましたが、下記データも抽出されてしまいます。 002 001 テストA
Crimson_Tide

2021/06/20 04:23

であれば抽出条件が不十分に思われます。 表現がうまくないのでより適切なものにして頂きたいですが、 「同じAcode列(Bcodeが同じ場合も?)で Aname列が"テストA"と "テストD" を含む場合」ということでしょうか
entaro12345

2021/06/20 04:29

表現が適切でなくて申し訳ございません。 たしかに、あいまいな感じになっております。 「同じAcode列で Aname列が"テストA"と "テストD" を含む場合」が正しい条件になります。 ※追記しておきます。
Crimson_Tide

2021/06/20 04:50

ご対応ありがとうございます。 Acode列のテストAのエントリーは0個若しくは1個という認識であっていますか。 それとも 以下のようなケースはありますか。 001 001 テストA 001 002 テストA 001 003 テストA 001 002 テストD 001 004 テストD
entaro12345

2021/06/20 05:13

こちらこそご丁寧にご指摘ありがとうございます。 Acode列のテストAのエントリーは0個 or 1個の認識で合っております。
Crimson_Tide

2021/06/20 06:51

確認の回答ありがとうございます。 既に適切な回答が得られているようで何よりです。
guest

回答3

0

SQL

1select Acode, Bcode, Aname 2from テーブル 3where Aname in ("テストA", "テストD") 4 and Acode in ( 5 select Acode 6 from テーブル 7 where Aname in ("テストA", "テストD") 8 group by Acode 9 having count(distinct Aname)=2 10 )

投稿2021/06/20 05:50

sazi

総合スコア25173

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

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

entaro12345

2021/06/20 05:57

ありがとうございます! 頂いた方法で実現可能になりました!
sazi

2021/06/20 06:02

条件に該当する同じデータが複数ある時はdistinctが必要ですので、注意して下さい。
entaro12345

2021/06/20 08:04

ありがとうございます。 注意するようにいたします。
guest

0

ベストアンサー

もっとスマートな方法があるような気がしますが

mysql> select * -> from tbl -> where acode in ( -> select acode -> from tbl -> where name in ('A', 'D') -> group by acode -> having count(*) = 2 -> ) -> and name in ('A', 'D'); +-------+-------+------+ | acode | bcode | name | +-------+-------+------+ | 001 | 001 | A | | 001 | 004 | D | | 003 | 001 | A | | 003 | 002 | D | +-------+-------+------+ 4 rows in set (0.00 sec) mysql>

投稿2021/06/20 05:49

wai_

総合スコア66

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

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

entaro12345

2021/06/20 05:57

ありがとうございます! 頂いた方法で実現可能になりました!
guest

0

考え方としては...

1.[Aname]列が"テストA"と"テストD"どちらも含む[Acode]を抽出する。
2.上記に含まれる[Acode]で、かつ、[Aname]列が"テストA"または"テストD"の行を抽出する。
とすれば、実現可能です。

1は、[Acode]で、該当テーブルをjoinすれば、可能かと。
2は、1をサブクエリとして、INで。

バージョンによっては、もっと良い方法もあるかと思いますが、汎用性は高いかと思いますので、参考にしてください。

投稿2021/06/20 05:48

YT0014

総合スコア1708

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

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

entaro12345

2021/06/20 05:56

ありがとうございます! 一気にやらず分割すればたしかにわかりやすく実現可能ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問