我在查找有条件的记录时遇到了问题。我想找到所有带有标志的课程。
课程表记录:
+----+------+-----------------+
| id | code | name |
+----+------+-----------------+
| 1 | JPA | JPA Lorem ipsum |
| 2 | JSF | Jsf lorem ipsum |
+----+------+-----------------+
course_flags表的记录:
+----+-----------+---------+
| id | course_id | flag_id |
+----+-----------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
+----+-----------+---------+
SELECT `course`.`id`, `course`.`name` FROM `course`
INNER JOIN `course_flags`
ON `course` .`id` = `course_flags`.`course_id`
WHERE (`course_flags`.`flags_id` = 1)
数据库返回:
+----+-----------------+
| id | name |
+----+-----------------+
| 1 | JPA Lorem ipsum |
+----+-----------------+
SELECT `course`.`id`, `course`.`name` FROM `course`
INNER JOIN `course_flags`
ON `course` .`id` = `course_flags`.`course_id`
WHERE (`course_flags`.`flags_id` = 1 and `course_flags`.`flags_id` = 2)
数据库返回:
null
我想收到:
+----+-----------------+
| id | name |
+----+-----------------+
| 1 | JPA Lorem ipsum |
+----+-----------------+
问题我如何得到?
提前致谢!
我怀疑您想要提供所有标志的所有课程。
您可以通过在联接中添加一个或条件,然后检查标志的数量是否符合您的期望来做到这一点:
SELECT `course`.`id`, `course`.`name` FROM `course`
INNER JOIN `course_flags`
ON `course` .`id` = `course_flags`.`course_id`
AND (`course_flags`.`flags_id` = 1 OR `course_flags`.`flags_id` = 2)
WHERE
GROUP BY (course.id)
HAVING COUNT(DISTINCT course_flags.id) = 2;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句