我有一个在多个表上使用内连接的select语句,我希望从一个特定的表中获取COUNT()
,但是我当前的语句会抛出错误:
语法错误:意外'COUNT'(计数)
有用的。我知道。一定要喜欢MySQL详细而深入的错误信息。
这是我的选择声明:
SELECT SE.SEId, SE.ParentME, SE.ParentSE, SE.Name, SE.Status, SE.Description,
UDC.UDCId, UDC.Code, UDC.Description,
TRM.COUNT(*)
FROM SubEquipment SE
INNER JOIN UserDefinedCode UDC ON UDC.ETId = SE.EquipmentType
INNER JOIN Terminal TRM ON TRM.SEId = SE.SEId
GROUP BY TRM.SEId
WHERE ParentME = @MEId;
我做错了什么?这可能吗?
答案 0 :(得分:1)
您想要执行以下操作:
SELECT SE.SEId, SE.ParentME, SE.ParentSE, SE.Name, SE.Status, SE.Description,
UDC.UDCId, UDC.Code, UDC.Description,
COUNT(DISTINCT TRM.SEID)
FROM SubEquipment SE
INNER JOIN UserDefinedCode UDC ON UDC.ETId = SE.EquipmentType
INNER JOIN Terminal TRM ON TRM.SEId = SE.SEId
WHERE ParentME = @MEId
GROUP BY 1,2,3,4,5,6,7,8,9
由于Count是一个聚合,因此必须对您的单个度量进行分组。加上你看到的错误是因为COUNT不是TRM中的一列。这就是它认为你要求的东西。
答案 1 :(得分:0)
尝试COUNT(DISTINCT [the TRM primary key field(s)])
;它应该统计不同的终端" id"值,所以即使中间JOIN与行相乘,您仍然可以获得终端数量。
答案 2 :(得分:0)
除了FirebladeDan的答案之外,(正如他所建议的那样)子查询也清除了这个问题:
SELECT DISTINCT SE.SEId, SE.ParentME, SE.ParentSE, SE.Name, SE.Status, SE.Description,
UDC.UDCId, UDC.Code, UDC.Description,
--Subquery to get the count
(SELECT COUNT(*) FROM Terminal WHERE TRM.SEId = SE.SEId) AS TerminalCount
FROM SubEquipment SE
INNER JOIN UserDefinedCode UDC ON UDC.ETId = SE.EquipmentType
LEFT JOIN Terminal TRM ON TRM.SEId = SE.SEId
WHERE ParentME = @MEId;
这消除了对列进行分组的需要。
子注释:我将终端表上的INNER JOIN
更改为LEFT JOIN
,因为如果SEId
没有任何关联的终端,则不会返回任何信息,这也称为对于DISTINCT
查询。