我使用此查询选择其他表上的评论计数,但它会给我错误
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
更新
错误是这样的:
text,ntext和image数据类型无法比较或 存储,除非使用IS NULL或LIKE运算符。
但我的表格中没有图像数据类型
答案 0 :(得分:1)
嗯,你还没有指明错误文本是什么......但在这种特殊情况下很容易推断出来。
您的问题是join
和select
中的别名使用不正确。
应该不
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
答案 1 :(得分:-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