select name , room
from class
where room="R128"
or name in (select cname
from enrolled
group by cname
having count(*)>=5;
);
而且此查询似乎因为它是找出是否提到它的每一个名字是其中任何一个CNAME存在会花费更多的时间。你可以做的更好吗?这个语法有什么问题?我应该如何使它工作?
select name , room
from class
where room="R128"
or name in (select cname
from enrolled
group by cname
having count(*)>=5;
);
而且此查询似乎因为它是找出是否提到它的每一个名字是其中任何一个CNAME存在会花费更多的时间。你可以做的更好吗?这个语法有什么问题?我应该如何使它工作?
周围的字符串常量的双引号是可疑的,但它应该工作。以下可能不会修复查询,但您应该限定所有列名称并使用别名。而且,通常最好使用显式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
'谢谢戈登。你也可以找到这里有什么问题吗?:从snum入的学生中选择sname(从注册中选择snum;); –
@StuperDuper。 。 。问题应该作为问题提出,而不是评论。 –
好的,我会在下次@Gordon时保重 –
这是一个测验。 _Oh阁下我没有修改_ – RiggsFolly
开始''''后''= 5;' – RiggsFolly