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

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

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

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

SQL

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

Q&A

解決済

1回答

4057閲覧

多対多のテーブルからSQLで複数条件を指定してデータを抽出する方法

kamiyu

総合スコア10

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

SQL

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

0グッド

0クリップ

投稿2020/02/06 14:37

前提

DBはオラクルでプログラムはPHPで開発しています。

実現したいこと

多対多のテーブルからSQLでデータを取得する条件の書き方について、検索条件を複数指定する書き方がどうしても分からず困っています。文章で説明するのが難しいので、具体的な例を下記に記載します。

具体的なテーブル構造とデータ

社員テーブル、グループテーブル、社員グループリンクテーブルがあります。
1人の社員は複数のグループに所属し、1つのグループには複数の社員が所属します。

社員
A
B
C

グループ
G1
G2

社員グループリンク
A、G1
B、G1
B、G2
C、G2

上記では社員Bだけが2つのグループに所属しています。

データ抽出する際の条件

この状態のデータを検索する画面を作りたいのですが、画面からはグループを検索条件に社員を抽出したいです。
そして、ここが1番のネックなのですが、グループの検索条件を複数指定し、and条件、or条件を選んで抽出したいのです。

検索条件と期待される抽出結果
(1)G1だけ⇒A、Bを抽出
(2)G2だけ⇒B、Cを抽出
(3)G1orG2⇒A、B、Cを抽出
(4)G1andG2⇒Bを抽出
(1)~(3)はSQLを作成できたのですが、(4)を満たすSQLがどうにも作成できません。
検索条件に指定されたグループの分だけプログラムでjoin句を生成して抽出する方法を考えたのですが、理論上条件指定できるグループに上限が無いので妥当な方法では無いような気がしています。
どうやってググったら良いかの検討もついていない状況なので、検索のヒントだけでも教えていただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

SQL

1select * 2from 社員グループリンク 3where 社員 in (select 社員 from 社員グループリンク where グループ='G1') 4 and 社員 in (select 社員 from 社員グループリンク where グループ='G2')

投稿2020/02/06 15:31

sazi

総合スコア25206

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

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

kamiyu

2020/02/07 14:28

sazi様 回答ありがとうございます。 記載していただいたSQLで試してみたのですが、まだ上手くいっていません。 社員が何も抽出されませんでした。 実際には他の条件も記載が必要だったので、そちらが影響しているのかもしれません。 可能な限り条件を削除しながら記載のSQLに近づけて調べてみたいと思います。 なお、調査中にDB接続ができない問題が発生しており、作業が中断している状況です。
kamiyu

2020/02/10 13:51

こちら、記載していただいたSQLを変形することで解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問