MySQL仅在满足一次条件时加入
也许有一个简单的解决办法,但我不能完全相信 假设我们有4张桌子 人员(身份证,是教师) 人员关系(id、人员id、教师id) 房间关系(id、人员id、房间id) 房间(id)(此处未使用) 人可以是教师也可以是学生。 如果一个人是教师,他们可以通过人际关系分配多个学生。 一个人可以直接或通过他们的老师被分配到多个房间(所以person->room或person(no-teacher)->person(teacher)->room) 我想找到没有分配到任何房间的人,既不是直接分配的,也不是通过分配房间的老师分配的。但我的查询也会返回分配给教师的人员,其中有些人有房间,有些人没有。因此,如果其中一位老师有指定的房间,我不希望学生回到这里MySQL仅在满足一次条件时加入,mysql,left-join,multiple-tables,Mysql,Left Join,Multiple Tables,也许有一个简单的解决办法,但我不能完全相信 假设我们有4张桌子 人员(身份证,是教师) 人员关系(id、人员id、教师id) 房间关系(id、人员id、房间id) 房间(id)(此处未使用) 人可以是教师也可以是学生。 如果一个人是教师,他们可以通过人际关系分配多个学生。 一个人可以直接或通过他们的老师被分配到多个房间(所以person->room或person(no-teacher)->person(teacher)->room) 我想找到没有分配到任何房间的人,既不是直接分配的,也不是通过分
SELECT * FROM persons p
LEFT JOIN rooms_relation r ON r.person_id = p.id
LEFT JOIN persons_relation pr ON pr.person_id = p.id
LEFT JOIN rooms_relation tr ON tr.person_id = pr.teacher_id
WHERE tr.id IS NULL AND r.id IS NULL;
例如:
- 第一个人是学生
- 7、8、9人是教师
- 学生分配给教师7、8和9(通过人际关系)
- 学生没有指定房间
- 教师7和9有分配给他们的房间(通过房间关系)
- 8老师没有指定房间(这就是问题所在)
(我知道我可能只使用了一个房间联接,但我)
我想查找未分配到任何房间的人员
以下查询将列出不在rooms\u relation
表中的人员。这不是你想要的吗
SELECT
*
FROM
`persons`
WHERE
`id` NOT IN (
SELECT
DISTINCT(person_id)
FROM
`rooms_relation`
)
我想我解决了。
由于一个人行的数量大于1,如果有任何关系,我必须添加这个条件
SELECT * FROM persons p
LEFT JOIN rooms_relation r ON r.person_id = p.id
LEFT JOIN persons_relation pr ON pr.person_id = p.id
LEFT JOIN rooms_relation tr ON tr.person_id = pr.teacher_id
WHERE tr.id IS NULL AND r.id IS NULL
GROUP BY p.id
HAVING count(p.id) = 1;
你必须合计一名学生,并计算房间数量。如果为正,则不应返回该行。