我可以在多个表中使用COUNT(*)吗?

时间:2015-08-20 00:01:00

标签: mysql

我有一个在多个表上使用内连接的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;

我做错了什么?这可能吗?

3 个答案:

答案 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查询。