我有两个简单的表格 - Firm
和Groups
。我还有一个表FirmGroupsLink
用于在它们之间建立连接(连接是一对多)。
表Firm
包含属性 - FirmID
,FirmName
,City
表Groups
包含属性 - GroupID
,GroupName
表FirmGroupsLink
包含属性 - FrmID
,GrpID
现在我想进行一个查询,它将返回所有那些拥有较少组的公司,然后是@num,所以我写了
SELECT FirmID, FirmName, City
FROM (Firm INNER JOIN FirmGroupsLink ON Firm.FirmID =
FirmGroupsLink.FrmID)
HAVING COUNT(FrmID)<@num
但它没有运行,我在Microsoft Access中尝试这个,但它最终应该适用于Sybase。请告诉我,我做错了什么。 提前谢谢。
答案 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
,因为您可能想要不属于任何群组的公司。