mysql - 我需要从关系平板电脑中选择基于 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 的问题)。我怎样才能做到这一点?
解决方案
您可以通过使用聚合检查类别的不同计数是否等于您要求的类别数来做到这一点。结果只能得到一行,您可以使用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;
推荐阅读
- laravel - 带有 if 语句的 laravel 控制器问题
- python - Python:将 dic 值添加到文件名
- angular - Typescript error Type AnimatesDirective in is part of the declaration of 2 modules
- python-3.x - 从文本文件计算 x 和 y 坐标的距离
- sql - JOIN PostgreSQL 和 GROUP BY 中的两个表
- html - 溢出-y 不滚动
- c# - 在 Windows 窗体 C# 中加载图像时遇到问题
- javascript - 是否可以更快地运行此脚本?
- asp.net-mvc - 从Controller返回对象列表并解析razor c# mvc中的对象
- sql - T-SQL 透视排序顺序