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')
我需要找到所有报读操作系统设计课程但没有报读数据库系统设计的学生的姓名。所以我写了这个查询。这里学生是第 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')