首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在满足一次条件时才加入MySQL

只有在满足一次条件时才加入MySQL
EN

Stack Overflow用户
提问于 2021-06-08 18:08:46
回答 2查看 41关注 0票数 2

也许有一个简单的解决办法,但我不能把它当回事。

假设我们有4张桌子--人(id,is_teacher) persons_relation (id,person_id,teacher_id) rooms_relation (id,person_id,room_id)房间(id) (不在这里使用)

人可以是教师,也可以是学生。如果一个人是教师,他们可以通过persons_relation分配多个学生。一个人可以被分配到许多房间,直接或通过他们的老师(所以人->房间或人(没有老师)->person(教师)->room)。

我想找到那些没有被分配到任何房间的人,既不是直接的,也不是通过指定房间的老师。但是,我的查询还会返回被分配给教师的人,其中一些人有房间,有些人没有。所以,如果其中一个老师有一个房间,我不希望学生返回这里。

代码语言:javascript
复制
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;

示例:

student

  • persons 7, 8,9是teachers

  • student分配给教师7,8和9 (via persons_relation)

  • student没有房间assigned

  • teachers 7,9有分配给他们的房间(via rooms_relation)

  • teacher 8没有分配房间(这是问题所在)

)

由于学生至少有一个房间通过教师7和9分配给他,他不应该被退回。但是由于老师8没有指定空间,所以有一行tr.id是空的,所以他会被返回。我不想这样。

(我知道在房间里我只需要一次连接,但我)

EN

回答 2

Stack Overflow用户

发布于 2021-06-08 18:32:17

I want to find the persons that ARE NOT assigned to ANY room

下面的查询将列出不在rooms_relation表中的人员。不是你想要的吗?

代码语言:javascript
复制
 SELECT 
        * 
    FROM 
        `persons` 
    WHERE 
        `id` NOT IN (
            SELECT 
                DISTINCT(person_id) 
            FROM 
                `rooms_relation`
        )
票数 0
EN

Stack Overflow用户

发布于 2021-06-08 22:28:24

我想我解决了。由于一人行的数目大于1,如果有任何关系,我只需添加这个条件。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67892439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档