1

収集するテーブルのセットがあり、そこから2つの異なるブラックリスト(typeId)間の個別のIPアドレス(ip)の数を見つけようとしています。基本的にはテーブルと交差します。ただし、テーブルをそれ自体に結合するという私のクエリでは、奇妙な結果が得られます。

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を本当に混乱させているのか、混乱しているのかわかりません。

4

1 に答える 1

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 | 
+--------+--------+----------+
于 2013-03-14T02:30:02.187 に答える