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

时间:2015-04-28 07:29:30

标签: mysql sql join


我需要获得所有学生的详细信息,无论是在6号或7号房间,还是在任何房间都没有。如果他们在其他房间,简单地说,我不希望有这样的记录 我的架构是:

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

学生和房间通过student_room表格相关联。 但是,我无法弄清楚如何为此编写查询。

2 个答案:

答案 0 :(得分:2)

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

WHERE IS NULL

现在您只需要反转此逻辑以返回另一个子集。这称为反连接。 SQL中没有直接的语法,但有几种方法可以使用现有语法实现它。如果我们将上述查询作为起点,则最接近的匹配反连接形式将是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 ; + student方法:

sr.roll_no IS NULL

这是它的工作原理:

  1. 连接结果本身将包含来自sr.roll_no IS NULL表的所有学生,因为该表位于左外连接的左侧。

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

  3. 通过检查右侧是否有无匹配sr.roll_no; WHERE子句中排除匹配的行;它与fieldname的工作方式相同} fieldname.raw不能有空值。

答案 1 :(得分:1)

我明白了。

SELECT * FROM students 
INNER JOIN 
(SELECT roll_no,CASE WHEN room_no=6 or room_no=7 THEN 1 
        WHEN room_no IS NULL THEN 1
        ELSE 0 END AS is_room
 from student_room GROUP BY roll_no) AS room_info
ON students.roll_no=room_info.roll_no 
AND room_info.is_room=1