0

こんにちは、私にはわかりません...なぜこのクエリが機能しないのですか:

      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'
4

3 に答える 3

1

mycountarticleテーブルの列ではありません。それを書く正しい方法は次のようになります:

 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付けると非常に効率的です。

于 2012-05-15T20:40:54.173 に答える
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'
于 2012-05-15T20:42:56.533 に答える
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 
于 2012-05-15T20:37:59.887 に答える