SQL查询不检查之后和子句

emiclo007

我需要找到所有在CS348中以及ECE264或CS503中注册的学生的学生证和姓名但是,我的查询仅返回CS348中的学生。

select distinct STUDENT.s_id, STUDENT.s_name
from STUDENT
join ENROLMENT on STUDENT.s_id=ENROLMENT.s_id
where ENROLMENT.c_id = 'CS348' 
  and STUDENT.s_id = (select distinct STUDENT.s_id
                      from ENROLMENT
                      where ENROLMENT.c_id in ('ECE264', 'CS503'));

看一下数据库:

STUDENT

s_id s_name

234  Anglo Anebal         F
235  Abram Ace            S
236  Adelbert Antti       SP  
237  William Walker       GR
238  Emila Wdyth          GR
239  Judith Elba          S
240  Benjamin Bratt       SP
241  Tawny Kitaen         F 

ENROLMENT

c_name    s_id

CS110     240
CS110     241
CS348     235
CS348     239
CS348     237
CS250     236
CS250     241 
ECE264    236
ECE264    237
ECE264    238
MA525     236
CS503     238
CS503     239
CS448     240
CS250     240
MA511     240
戈登·利诺夫(Gordon Linoff)

我需要找到所有在CS348中以及在ECE264或CS503中注册的学生的学生证和姓名。

除了=与子查询一起使用,您的方法基本上还不错

select s.s_id, s.s_name
from STUDENT s join
     ENROLMENT
     on s.s_id = e.s_id
where e.c_id = 'CS348' and
      s.s_id in (select s.s_id
                 from ENROLMENT e2
                 where e2.c_id in ('ECE264', 'CS503')
                );

请注意使用表别名来简化查询的编写。另外,select distinct在子查询中绝对不需要。而且我怀疑外部查询中是否也需要它-一个学生可能不能多次注册一个班级。

也就是说,我经常使用聚合来解决此类问题:

select s.s_id, s.s_name
from STUDENT s join
     ENROLMENT
     on s.s_id = e.s_id
group by s.s_id, s.s_name
having sum(case when e.c_id = 'CS348' then 1 else 0 end) > 0 and
       sum(case when e.c_id in ('ECE264', 'CS503') then 1 else 0 end) > 0 ;

每个having条件都在检查课程中的条件之一。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询不检查之后和子句

来自分类Dev

SQL Update查询和Where子句

来自分类Dev

SQL查询:On子句和where子句的条件差异

来自分类Dev

我该如何使它的值为0的where子句不检查SQL Server存储过程中的where?

来自分类Dev

MYSQL存储过程不检查where子句并返回整个表

来自分类Dev

使用 WHERE IN 子句检查多维数组中的值的 SQL 查询

来自分类Dev

IN()子句中的SQL查询

来自分类Dev

sql where子句查询

来自分类Dev

OR子句减慢SQL查询

来自分类Dev

带OR子句的SQL查询

来自分类Dev

SQL 查询子句的顺序

来自分类Dev

按子句分组和排序中的SQL查询错误

来自分类Dev

如何执行此SQL查询(聚集group by和where in子句)?

来自分类Dev

使用 WHERE 子句和 CONVERT 或 CAST 的 T-SQL 查询

来自分类Dev

Oracle SQL:在子查询中或在联接之后使用WHERE子句是否更有效?

来自分类Dev

SQL查询在where和GroupBy之后查找唯一值

来自分类Dev

如果不检查Firebase参考以显示和隐藏按钮

来自分类Dev

Auth :: attempt不检查用户名和密码

来自分类Dev

sql server查询到Linq以鼓励转换不检索记录

来自分类Dev

sql server查询到Linq以鼓励转换不检索记录

来自分类Dev

在PL / SQL中的With子句之后使用for循环

来自分类Dev

在PL / SQL中的With子句之后使用for循环

来自分类Dev

使用Active Record的复杂Ruby SQL查询-使用OR子句和子查询的WHERE

来自分类Dev

SQL Server:如何提高WHERE子句中具有多个CTE和子查询的查询的性能

来自分类Dev

SQL In子句语法查询错误

来自分类Dev

SQL查询多个where子句

来自分类Dev

SQL查询使用组子句

来自分类Dev

在SQL Server中查询WITH子句

来自分类Dev

SQL查询中的WHERE子句

Related 相关文章

热门标签

归档