MySql查询哪里使用2个以上的条件

MySql query where to use more than 2 conditions

我需要找到所有报读操作系统设计课程但没有报读数据库系统设计的学生的姓名。所以我写了这个查询。这里学生是第 1 table,注册是第 2 table,外键是 snum。

select s.sname 
from student s, enrolled e 
where(s.snum=e.snum 
    AND e.cname="Operating System Design" 
    AND e.cname!="Database Systems"
    );

它只是打印在操作系统设计中注册的学生的名字,如果它喜欢它只是检查第一个条件。

您必须正确连接 2 个表,按学生分组并在 HAVING 子句中使用条件聚合:

SELECT s.id, s.sname 
FROM student s INNER JOIN enrolled e 
ON s.snum = e.snum  
GROUP BY s.id, s.sname
HAVING MAX(e.cname = 'Operating System Design') = 1
   AND MAX(e.cname = 'Database Systems') = 0

我在 GROUP BY 子句和 SELECT 中都使用学生 ID,以防万一 sname 列不是唯一的。
如果它是唯一的,您可以将其删除。

你也可以用 EXISTS:

SELECT s.id, s.sname 
FROM student s 
WHERE EXISTS (SELECT 1 FROM enrolled e WHERE s.snum = e.snum AND e.cname = 'Operating System Design')
AND NOT EXISTS (SELECT 1 FROM enrolled e WHERE s.snum = e.snum AND e.cname = 'Database Systems')