2012-05-15 98 views
0

日安傢伙, 我不知道未知列「article.mycount」 ......爲什麼不這樣的查詢工作:MySQL的 - 在「where子句」

 SELECT article.topic, article.ID, 
     (
     SELECT COUNT(*) FROM comment 
     WHERE article.ID_art = comment.foreign_ID_art 
     GROUP BY foreign_ID_art 
    ) 
     AS mycount 

     FROM article 
     WHERE article.mycount = '0' 

回答

1
SELECT article.topic, article.ID, 
    (
    SELECT COUNT(*) FROM comment 
    WHERE article.ID_art = comment.foreign_ID_art 
    GROUP BY foreign_ID_art 
) 
    AS mycount 

FROM article 
HAVING mycount = '0' 
+1

看起來不錯,但它不起作用。它寫給我: '有條款'中的未知列'article.mycount' – RePRO

+0

我的不好,現在應該工作。它應該只是簡單的'HAVING mycount ='0'' –

+0

現在的作品,謝謝! – RePRO

0

你不能使用列where子句中的別名。也許你可以這樣做

select * 
(SELECT article.topic, article.ID,   
(  
SELECT COUNT(*) FROM comment  
WHERE article.ID_art = comment.foreign_ID_art  
GROUP BY foreign_ID_art  
)   
AS mycount   
FROM article) mytab  
from myab 
WHERE mytab.mycount = 0 
+0

那裏沒有括號? – RePRO

+0

而這是非常困難的解決方案。 ;-) – RePRO

1

mycount不是article表中的列。正確的方式來寫這將是:

SELECT article.topic, 
     article.ID , 
     (SELECT COUNT(*) 
     FROM  COMMENT 
     WHERE article.ID_art = comment.foreign_ID_art 
     GROUP BY foreign_ID_art 
     ) 
     AS mycount 
FROM article HAVING mycount = 0 

的另一種方式來達到同樣的效果,但在某種程度上,這可能是一個有點更有效(給予適當的索引存在):

SELECT article.topic, 
     article.ID 
FROM article 
     LEFT JOIN COMMENT 
     ON  article.ID_art = comment.foreign_ID_art 
WHERE comment.foreign_ID_art IS NULL 

最後,最好將article表中的每篇文章的評論數存儲爲comment_count列,並在添加新評論時將其增加。然後查詢可以簡化爲:

SELECT article.topic, 
     article.ID 
FROM article 
WHERE article.comment_count = 0 

隨着索引comment_count它將是非常有效的。

+0

看起來不錯(與HAVING),但它不起作用。它給我寫信: 'having clause'中的未知列'article.mycount' – RePRO

+0

'HACHING mycount = 0'而不是'HAVING article.mycount = 0'。 'mycount'不是'article'中的一列,所以你不能這樣引用它。 – Mushu

+0

謝謝。 ;-)你的第一個解決方案和用戶AndriusNaruševičius一樣。但你的遺漏撇號。 :-) 第二個幫助我使用IS NULL,最後一個是使用索引的最佳解決方案。 非常感謝你用3種不同的方法來解決這個問題。 – RePRO