如何选择另一个表的行数

时间:2015-02-10 11:00:36

标签: sql sql-server

我使用此查询选择其他表上的评论计数,但它会给我错误

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运算符。

但我的表格中没有图像数据类型

2 个答案:

答案 0 :(得分: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

答案 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