2015-02-10 21 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 
相關問題