0

これらの 3 つのテーブルがあります (プレビューを添付します)。リストの最後は、テーブル「virustotalscans」のデータの例です。「virustotal」という名前の列があります。それぞれの固有のサンプルには番号があり、たとえば 165、次のサンプルには番号 166 などがあります。

テーブル仮想合計

CREATE TABLE virustotals (
                            virustotal INTEGER PRIMARY KEY,
                            virustotal_md5_hash TEXT NOT NULL,
                            virustotal_timestamp INTEGER NOT NULL,
                            virustotal_permalink TEXT NOT NULL
                    );
CREATE INDEX virustotals_md5_hash_idx
                    ON virustotals (virustotal_md5_hash);

テーブル仮想スキャン

CREATE TABLE virustotalscans (
                    virustotalscan INTEGER PRIMARY KEY,
                    virustotal INTEGER NOT NULL,
                    virustotalscan_scanner TEXT NOT NULL,
                    virustotalscan_result TEXT
            );
CREATE INDEX virustotalscans_result_idx
                    ON virustotalscans (virustotalscan_result);
CREATE INDEX virustotalscans_scanner_idx
                    ON virustotalscans (virustotalscan_scanner);
CREATE INDEX virustotalscans_virustotal_idx
                    ON virustotalscans (virustotal);

テーブルのダウンロード

CREATE TABLE downloads (
                            download INTEGER PRIMARY KEY,
                            connection INTEGER,
                            download_url TEXT,
                            download_md5_hash TEXT
                            -- CONSTRAINT downloads_connection_fkey FOREIGN KEY (connection) REFERENCES connections (connection)
                    );
CREATE INDEX downloads_connection_idx   ON downloads (connection);
CREATE INDEX downloads_md5_hash_idx
                    ON downloads (download_md5_hash);
CREATE INDEX downloads_url_idx
                    ON downloads (download_url);

テーブル「virustotalscans」のデータの例: http://pastebin.com/7E7McZwT

ここで、列「virustotalscan_result」のすべての行にあるすべてのサンプルを選択する必要があります。したがって、アンチウイルスで VirusTotal を検出しないすべてのサンプルを選択する必要があります。私はこの選択を試みました:

select distinct downloads.download_md5_hash from virustotalscans, virustotals, 
   downloads 
where downloads.download_md5_hash = virustotals.virustotal_md5_hash and 
   virustotals.virustotal = virustotalscans.virustotal and 
   virustotalscans.virustotalscan_result IS NULL;

しかし、私はすべてのサンプルの MD5 ハッシュを取得しています...おそらく、すべてのサンプルに少なくとも 1 行の空の行が含まれていることが理由です。一部のアンチウイルスは常に一部のサンプルを検出しないため、これは論理的です。

より良い例: http://pastebin.com/y81DPpmQ。ここで、sample - number (列 virustotal) を選択する必要があります。ここで、列 virustotalscan_result のすべての行が空です。たとえば、番号 2 のみを指定できます。

助けてください。

返信ありがとうございます。

4

1 に答える 1

0
SELECT download_md5_hash
FROM downloads
JOIN virustotals ON download_md5_hash = virustotal_md5_hash
WHERE virustotal IN (SELECT virustotal
                     FROM virustotalscans
                     GROUP BY virustotal
                     HAVING COUNT(virustotalscan_result) = 0)
于 2013-08-15T20:00:19.637 に答える