首页 > 解决方案 > 我需要从关系平板电脑中选择基于 2 个寄存器的结果。我怎么做?

问题描述

我有 3 张桌子:

Question (id, questionText) 
QuestionCategory (id, categoryName) 
Question_QuestionCategory (questionId, categoryId)

样本数据:

表问题:

id  |   questionText
1   |   2 + 2 = ?
2   |   10 x 5 / 3 + 5 = ?
3   |   USA is located in which continent?

表题类别:

id  |  categoryName
1   |  Easy
2   |  Hard
3   |  Math
4   |  Geography

表 Question_QuestionCategory:

questionId | categoryId
    1      |     1
    1      |     3
    2      |     2
    2      |     3
    3      |     1
    3      |     4

Question_QuestionCategory 表是一个关系表,用于存储 question 和 questionCategory 表中的外键。

我的问题是:我需要一个选择来返回给我一个同时具有 Hard 和 Math 类别的问题(在这种情况下是 id 为 2 的问题)。我怎样才能做到这一点?

标签: mysql

解决方案


您可以通过使用聚合检查类别的不同计数是否等于您要求的类别数来做到这一点。结果只能得到一行,您可以使用LIMIT.

SELECT q.id,
       q.text
       FROM question q
            INNER JOIN question_questioncategory qc
                       ON qc.question = q.id
            INNER JOIN questioncategory c
                       ON c.id = qc.categoryid
       WHERE c.categoryname IN ('Hard',
                                'Math')
       GROUP BY q.id,
                q.text
       HAVING count(DISTINCT c.categoryname) = 2
       LIMIT 1;

推荐阅读