私はテーブルquestion、topicおよびquestion_has_topic(多対多の関係)を持っています。私のアプリケーションでは、管理者は自分のトピックでグループ分けされた質問の内訳を見て、システムから無作為に選択してテストを作成することを希望する人数を選択します。条件を満たすすべての条件に基づいて選択する(リレーショナル部門)
+-----------------------+---------------------+------------+ | Topics | Questions available | Selection: | +-----------------------+---------------------+------------+ | health,safety,general | 13 | | | health | 3 | | | safety | 7 | | | general | 1 | | +-----------------------+---------------------+------------+
カウントがトピックの特定のグループ化のためにユニークです:
これは、彼らが参照テーブルの一種です。とにかく、彼らが選択をしたら、私はトピックのグループ化に対応する質問を選択するSQL文が必要です。 I.健康、安全、一般的な話題の3つの質問が必要な場合があります。
私はオンラインいくつかの研究をしていたと私は私がやろうとしているリレーショナル代数で、ここで除算として知られていることのTopicIDsの任意のグループ化のための私の試みであることを考える:
select questionid from question_has_topic where not exists ( select questionid from question_has_topic where topicid not in (8,9,10))
結果が空である、が、データベースに2つの質問がありますが、これらのトピックIDはすべて動作していないことを示しています。
SELECT questionid FROM question WHERE NOT EXISTS (
SELECT topicid FROM topic WHERE topicid NOT IN (
SELECT topicid FROM question_has_topic WHERE question.questionid = question_has_topic.questionid
) AND topicid IN (8, 9, 10)
);
これは間違いなくはるかに高速です - - 私は、私は、これはあなたが書くしようとしていたものだと思うが、それはそれを行うための非常に非効率的な方法である。このlink
質問が分かりませんでした。 – Luke101
を言い換えることができますか?結果を見つけるには10通り以上の方法でこの質問を参照してください:[多人数関係でSQL結果をフィルタリングする方法](http://stackoverflow.com/questions/7364969/how-to- filter-sql-results-in-a-has-many-through-relation)、パフォーマンステスト(MySQLではなくPostgres用) –