如果count小于数字,则获取对象

时间:2013-04-24 09:40:12

标签: mysql sql sybase

我有两个简单的表格 - FirmGroups。我还有一个表FirmGroupsLink用于在它们之间建立连接(连接是一对多)。

Firm包含属性 - FirmIDFirmNameCity

Groups包含属性 - GroupIDGroupName

FirmGroupsLink包含属性 - FrmIDGrpID

现在我想进行一个查询,它将返回所有那些拥有较少组的公司,然后是@num,所以我写了

SELECT FirmID, FirmName, City
FROM (Firm INNER JOIN FirmGroupsLink ON Firm.FirmID =
FirmGroupsLink.FrmID) 
HAVING COUNT(FrmID)<@num

但它没有运行,我在Microsoft Access中尝试这个,但它最终应该适用于Sybase。请告诉我,我做错了什么。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

为了正确计算,您需要提供您正在招揽的群组 如果您没有分组,则拥有子句,而且计数不起作用。

在此您按照公司计算。实际上,因为您需要检索有关公司的信息,所以您要按FirmId,FirmName和City进行分组,因此查询应如下所示:

SELECT Firm.FirmID, Firm.FirmName, Firm.City
FROM Firm
    LEFT OUTER JOIN FirmGroupsLink 
        ON Firm.FirmID = FirmGroupsLink.FrmID
GROUP BY Firm.FirmID, Firm.FirmName, Firm.City
HAVING COUNT(FrmID) < @num

请注意,我将INNER JOIN替换为LEFT OUTER JOIN,因为您可能想要不属于任何群组的公司。