有2个表,一个叫AI,一个叫Ai_sig
AI包括SID,TIME 等等栏位
在Ai_sig中value是主键
Ai_sig中包括value和AttackName栏位
语句如下
SELECT TOP 10 AI.SID,min(Ai_sig.AttackName) AS Name,COUNT(AI.SID) AS NUM FROM AI LEFT JOIN Ai_sig ON AI.SID=Ai_sig.value GROUP BY AI.SID ORDER BY COUNT(AI.SID) DESC当该表中只有一条数据时,COUNT(AI.SID) AS NUM的值应该为1,但是得到的结果是2
我试着加入了几条SID相同的数据,发现搜索的出的结果也是期待结果的2倍。
请问这是为什么?
用SELECT COUNT(Index) AS SUM FROM AI 结果是正常的。另外,和这个非常相同的一条语句:
SELECT TOP 10 AV.SID,min(Klav_sig.VirusName) AS Name,COUNT(AV.SID) AS NUM FROM AV LEFT JOIN Klav_sig ON AV.SID=Klav_sig.value GROUP BY AV.SID ORDER BY COUNT(AV.SID) DESC
得到的NUM值就是1倍,即正确的结果。谁能告诉我该如何改吗?
谢谢!
AI包括SID,TIME 等等栏位
在Ai_sig中value是主键
Ai_sig中包括value和AttackName栏位
语句如下
SELECT TOP 10 AI.SID,min(Ai_sig.AttackName) AS Name,COUNT(AI.SID) AS NUM FROM AI LEFT JOIN Ai_sig ON AI.SID=Ai_sig.value GROUP BY AI.SID ORDER BY COUNT(AI.SID) DESC当该表中只有一条数据时,COUNT(AI.SID) AS NUM的值应该为1,但是得到的结果是2
我试着加入了几条SID相同的数据,发现搜索的出的结果也是期待结果的2倍。
请问这是为什么?
用SELECT COUNT(Index) AS SUM FROM AI 结果是正常的。另外,和这个非常相同的一条语句:
SELECT TOP 10 AV.SID,min(Klav_sig.VirusName) AS Name,COUNT(AV.SID) AS NUM FROM AV LEFT JOIN Klav_sig ON AV.SID=Klav_sig.value GROUP BY AV.SID ORDER BY COUNT(AV.SID) DESC
得到的NUM值就是1倍,即正确的结果。谁能告诉我该如何改吗?
谢谢!
access 使用jetsql,mssql使用t-sql
二者的top n有区别.
设有表 tb(id int)
1
1
1
2
2
3
3
t-sql的 top n ,指无论数据如何, 只按排序列取n条,即一行做一次计数
select top 2 * from tb order by id
结果两行
1
1
jetsql的top n,重复行做为一次top计数
select top 2 * from tb order by id
结果不定,如果数据表中至少有2行记录,那么结果至少是2行,也即选出的结果>=n
1
1
1
2
2
2
你的第一条语句,虽然第一个表sid只一条记录,但连表时,可能会一对多,形成多条记录,
比如 ta (sid int counter) tb(id int)
ta 有
1
2
tb有
1
1
2
连表后,sid=1的会出现两条我看了你的第二条语句,因为用的连表的表名不一样,可能是一对一,所以count是正常的.还是一句话, jetsql的top n依赖排序字段的值, 而不光依赖于n
逻辑上就不通。