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