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

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

詳細はこちら
SQL

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

Q&A

解決済

2回答

524閲覧

【SQL】複数条件に一致するデータの抽出について

chikurin1

総合スコア1

SQL

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

0グッド

0クリップ

投稿2021/01/31 11:07

お世話になります。
SQLに関して質問があります。

<使用環境>
Oracle 12.2.01

「名前」と「趣味」のカラムを持つ「趣味TBL」から、
「趣味」に『野球』と『ゴルフ』と『競馬』すべてを持つ
「名前」を抽出するにはどのようにすればよろしいでしょうか?
(以下の例では『山田』を抽出したい)

趣味TBL

名前 趣味 ------ 山田 野球 山田 ゴルフ 山田 競馬 田中 野球 田中 ゴルフ 高橋 読書 高橋 野球

以下のような副問い合わせで期待したデータを抽出できましたが、もう少しシンプルにする方法があればご教示いただきたく思います。

select 名前 from 趣味TBL where 趣味 = '野球' and 名前 in ( select 名前 from 趣味TBL where 趣味 = 'ゴルフ' and 名前 in ( select 名前 from 趣味TBL where 趣味 = '競馬'))

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

いろいろやり方はあると思いますが、サブクエリを避ける方法としては以下のようなものがあると思います。

SQL

1SELECT 名前 2FROM 趣味TBL 3WHERE 趣味 = '野球' 4 OR 趣味 = 'ゴルフ' 5 OR 趣味 = '競馬' 6GROUP BY 名前 7HAVING COUNT(*) >= 3

サブクエリを許容するのであれば、INTERSECTを活用するとクエリの見通しが良くなります。

SQL

1SELECT 名前 FROM 趣味TBL WHERE 趣味 = '野球' 2INTERSECT 3SELECT 名前 FROM 趣味TBL WHERE 趣味 = 'ゴルフ' 4INTERSECT 5SELECT 名前 FROM 趣味TBL WHERE 趣味 = '競馬'

投稿2021/01/31 11:34

neko_the_shadow

総合スコア2349

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

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

chikurin1

2021/01/31 12:06

ありがとうございます!目からうろこです 前者については、ORで条件に一致するものすべて抽出しそれをカウント、条件の数と一致したものを取得すればよかったのですね。 後者のINTERSECTについては、あまり利用したことが無いため失念しておりました。 実行速度等を確認したうえで、どちらかを採用するか決めたいと思います。
guest

0

~~
in演算子にて複数条件指定されてはいかがでしょうか?

SQL

1SELECT 名前 FROM 趣味TBL WHERE 趣味 IN('野球', 'ゴルフ', '競馬');

~~
orではなかったですね。

以下でいかがでしょう?

SQL

1select 名前 from 趣味TBL where (趣味 = '野球') and (趣味 = 'ゴルフ') and (趣味 = '競馬')

投稿2021/01/31 11:30

編集2021/01/31 11:40
WhiteTempest

総合スコア404

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

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

chikurin1

2021/01/31 12:11 編集

ご確認ありがとうございます。 こちらはレコードがヒットしませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問