2016-08-13 74 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時保重 –