2012-05-15 74 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