gpt4 book ai didi

Mysql 返回 1 如果找到或根本不存在值,如果存在其他值,返回 0

转载 作者:行者123 更新时间:2023-11-29 05:18:05 30 4
gpt4 key购买 nike


我需要获取所有在 6 号或 7 号房间或根本不在任何房间的学生的详细信息。如果他们在其他房间,简单地说,我不希望有那个记录。
我的架构是:

students(roll_no, name,class,...)
rooms(room_no,...)
student_room(room_no,roll_no).

学生和房间通过student_room 表相关联。但是,我不知道如何为此编写查询。

最佳答案

这将为您提供 6 号或 7 号房间以外的学生的详细信息:

SELECT
s.*
FROM
student AS s
INNER JOIN student_room AS sr ON s.roll_no = sr.roll_no
WHERE
sr.room_no NOT IN (6, 7)
;

现在您只需反转此逻辑即可返回另一个子集。这称为反加入。在 SQL 中没有直接的语法,但是有几种使用现有语法实现它的方法。如果我们以上述查询为起点,最接近的匹配反连接形式将是 LEFT JOIN + WHERE IS NULL 方法:

SELECT
s.*
FROM
student AS s
LEFT JOIN student_room AS sr ON s.roll_no = sr.roll_no
AND sr.room_no NOT IN (6, 7)
WHERE
sr.roll_no IS NULL
;

它是这样工作的:

  1. 联接本身的结果将包含 student 表中的所有 个学生,因为该表位于左外部联接的左侧。

  2. 只有当相应的学生不在 6 号或 7 号房间时,联接的右侧才会有数据。否则它将包含空值。

  3. 通过检查右侧是否没有匹配,在 WHERE 子句中排除匹配的行(sr.roll_no IS NULL;它会工作与 sr.roll_no IS NULL 相同,前提是 sr.roll_no 不能有空值)。

关于Mysql 返回 1 如果找到或根本不存在值,如果存在其他值,返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913012/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com