2013-03-14 99 views
1

我有一套表來收集我試圖從兩個不同的黑名單(typeId)之間找到不同的IP地址(ip)的計數 - 基本上與表本身相交。但是我加入表格本身的查詢提供了奇怪的結果。SQL連接表本身提供了不完整的結果

sqlite> .schema 
CREATE TABLE feedz_ip2 (fileId INTEGER NOT NULL, ip NUMERIC, utime INT, typeId INTEGER); 
CREATE TABLE feedz_ip_types (typeId INTEGER PRIMARY KEY, type STRING UNIQUE); 
CREATE INDEX ip_id ON feedz_ip2(ip); 
CREATE INDEX types_id ON feedz_ip2(typeId); 
sqlite> select * from feedz_ip2 limit 4; 
1|86176256|1347929568|2 
1|247463936|1347929568|2 
1|247476224|1347929568|2 
1|247478272|1347929568|2 
sqlite> select * from feedz_ip_types; 

1 | malwaredomains 
2 | spamhaus 
3 | badipset 
4 | abuse.ch 
5 | malwarepatrol 

sqlite> select a.typeId, b.typeId, count(a.ip) 
      from feedz_ip2 a 
    inner join feedz_ip2 b on a.typeId != b.typeId and a.ip=b.ip 
     ; 

5 | 3 | 9265512 

什麼我尋找真正應該是所有不同列表

1|3|200 
1|5|900 
2|3|300 

交集如果沒有交集或共同的IP地址,這些列組合,不會列出。

我不知道,如果查詢是真的迷惑sqlite的或我很困惑..

+0

http://sqlfiddle.com/#!7/aed94/1/0你確定你正在顯示從查詢中得到的確切輸出嗎? – 2013-03-14 01:10:41

+1

你可以發表你自己加入的表格的內容(即'feedz_ip2')嗎?您只發布了似乎與您的問題無關的'feedz_IP_types'。 – 2013-03-14 01:13:07

+0

抱歉在第一組結果中沒有按語句組合 我更新了查詢..以上 sqlite>從feedz_ip2中選擇a.typeId,b.typeId,count(a.ip)一個內部聯接feedz_ip2 b on a.typeId!= b.typeId和a.ip = b.ip; 5 | 3 | 9265512 – Vijay 2013-03-14 01:24:33

回答

0

好找到了解決辦法:

select a.typeId, b.typeId, count(*) from feedz_ip2 a inner join feedz_ip2 b on a.typeId != b.typeId and a.ip=b.ip group by a.typeId,b.typeId; 
+--------+--------+----------+ 
| typeId | typeId | count(*) | 
+--------+--------+----------+ 
|  1 |  3 | 471718 | 
|  1 |  4 | 3662405 | 
|  1 |  5 | 323609 | 
|  2 |  3 |  426 | 
|  3 |  1 | 471718 | 
|  3 |  2 |  426 | 
|  3 |  4 | 133002 | 
|  3 |  5 | 41596 | 
|  4 |  1 | 3662405 | 
|  4 |  3 | 133002 | 
|  5 |  1 | 323609 | 
|  5 |  3 | 41596 | 
+--------+--------+----------+ 
+0

你可能想用'<而不是'!='來獲得單面結果 – 2013-03-14 02:54:45