2015-02-10 62 views
-1

我使用这个查询来选择的其他表意见计数,但它给我的错误如何选择行数的其它表

SELECT 
dbo.tblEmails.id, dbo.tblEmails.eTitle, dbo.tblEmails.ePreDesc, dbo.tblEmails.eTags, dbo.tblEmails.eFaDate, dbo.tblEmails.eViewCount, 
dbo.tblEmails.ePrice, dbo.tblEmails.eImg, COUNT(tblComments.id) AS cCount 
FROM 
dbo.tblEmails as tblEmails 
INNER JOIN 
dbo.tblComments AS tblComments ON dbo.tblEmails.id = dbo.tblComments.PostID 
GROUP BY 
tblEmails.id, tblEmails.eTitle, tblEmails.ePreDesc, tblEmails.eTags, tblEmails.eFaDate, tblEmails.eViewCount, tblEmails.ePrice, tblEmails.eImg 

UPDATE:

错误是这样的:

除非使用IS NULL或LIKE运算符,否则不能比较文本,ntext和图像数据类型或存储 。

但我还没有图像数据类型在我的表

+4

什么是错误讯息? – 2015-02-10 11:01:12

+0

“*但我没有图像数据类型*” - 你确定'dbo.tblEmails.eImg'不是'图像'吗?如果它是图像 - 比错误文本是自描述性的,因为你在'group by'语句中使用了这一列,并且假定它的值的比较。 – 2015-02-10 13:53:43

回答

-1

做一个子选择,以获得数:

SELECT dbo.tblEmails.id, dbo.tblEmails.eTitle, dbo.tblEmails.ePreDesc, dbo.tblEmails.eTags, dbo.tblEmails.eFaDate, dbo.tblEmails.eViewCount, 
dbo.tblEmails.ePrice, dbo.tblEmails.eImg, 
     (select COUNT(*) from dbo.tblComments 
     where dbo.tblEmails.id = dbo.tblComments.PostID) AS cCount 
FROM dbo.tblEmails as tblEmails 
+0

为什么downvote?请解释。 (简单易懂的代码和理解。) – jarlh 2015-02-10 12:24:47

1

好了,你有没有指定的文本是什么错误..但在这种特殊情况下很容易推断出来。

你的问题是在joinselect中别名的使用不正确。

应该

INNER JOIN dbo.tblComments AS tblComments ON dbo.tblEmails.id = dbo.tblComments.PostID 

INNER JOIN dbo.tblComments AS tblComments ON tblEmails.id = tblComments.PostID 

而同样的故事是关于选择 - 不dbo.tblEmails.id但是tblEmails.id因为您指定的别名。

但是请注意 - 使用确切的table_name作为dbo.table_name的别名看起来是一个坏主意,可能会导致混淆(事实上,它在您的情况下已导致)。

而是考虑使用缩略语短的别名,就像这样:

SELECT 
    E.id, E.eTitle, E.ePreDesc, E.eTags, 
    E.eFaDate, E.eViewCount,E.ePrice, E.eImg, 
    COUNT(C.id) AS cCount 
FROM dbo.tblEmails as E 
    INNER JOIN dbo.tblComments AS C ON E.id = C.PostID 
GROUP BY 
    E.id, E.eTitle, E.ePreDesc, E.eTags, 
    E.eFaDate, E.eViewCount,E.ePrice, E.eImg