2016-08-13 71 views

回答

0

周围的字符串常量的双引号是可疑的,但它应该工作。以下可能不会修复查询,但您应该限定所有列名称并使用别名。而且,通常最好使用显式join而非in - 好了,最近的MySQL版本有固定的这个性能问题,但你可以尝试:

select c.name, c.room 
from class c left join 
    (select e.cname 
     from enrolled e 
     group by e.cname 
     having count(*) >= 5 
    ) ec 
    on c.name = ec.cname 
where c.room = 'R128' or ec.cname is not null 

和性能,您可能希望索引class(name, room)enrolled(cname),你可以这样写:

select c.name, c.room 
from class c 
where c.room = 'R128' or 
     (select count(*) from enrolled e where e.cname = c.name) >= 5 
+0

'谢谢戈登。你也可以找到这里有什么问题吗?:从snum入的学生中选择sname(从注册中选择snum;); –

+1

@StuperDuper。 。 。问题应该作为问题提出,而不是评论。 –

+0

好的,我会在下次@Gordon时保重 –