我在查找条件所在的记录时遇到问题。我想找到所有课程,其中有标志/标志。
课程表的记录:
+----+------+-----------------+
| 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 |
+----+-----------------+
问我怎么得到它?
提前致谢!
答案 0 :(得分:2)
SELECT c.id, c.name
FROM course AS c
INNER JOIN course_flags AS cf
ON c.id = cf.course_id
WHERE cf.flags_id = 1
OR cf.flags_id = 2
答案 1 :(得分:2)
我怀疑你想要所有提供所有旗帜的课程。
您可以通过向连接添加或条件然后按预期检查标记数来执行此操作:
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;