2013-08-15 3 views
0

У меня эти три таблицы (я прилагаю предварительный просмотр). И в конце списка приведен пример данных в таблице «virustotalscans». Существует столбец с названием «virustotal». Каждый уникальный образец имеет номер, например, 165, следующий образец имеет номер 166 и т. Д.Как выбрать данные в одной таблице на другой пустой строке?

ТАБЛИЦА VIRUTOTALS

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); 

ТАБЛИЦА VIRUSTOTALSCANS

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 хэши всех образцов ... Возможно, причина в том, что все образцы содержат, по меньшей мере, одну строку, которая пуста. Это логично, потому что некоторый антивирус всегда не обнаруживает какой-то образец.

Лучший пример: http://pastebin.com/y81DPpmQ. Теперь мне нужно выбрать sample-number (column virustotal), где все строки пусты в столбце virustotalscan_result. Это может быть, например, только номер 2.

Помогите мне пожалуйста?

Большое спасибо за ответы.

+1

У вас, кажется, есть образец только для одной таблицы в вашем «pastebin». Вы можете получить более качественные и быстрые ответы, если вы воссоздаете свои образцы таблиц в SQL Fiddle [http://sqlfiddle.com]. –

+0

Как вы определяете «образец»? –

+0

Образец определяется столбцом virustotal в таблице VIRUSTOTALSCANS, это номер 165. Это один образец, остальные образцы имеют другое число. Итак, лучший пример: http://pastebin.com/y81DPpmQ. Теперь мне нужно выбрать образец - номер (столбец virustotal), где все. строки в столбце virustotalscan_result пустые. Это может быть, например, номер 2 ... – Mato

ответ

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) 
+0

Спасибо, но он работает правильно только для части позади NOT IN - выберите в скобках ... Так что он корректно работает только в таблице virustotalscans. – Mato

+0

Ваш комментарий не содержит никакой информации, которая позволила бы мне улучшить ответ. –

+0

Прошу прощения за то, что я напишу после долгого времени. Если я использую SELECT virustotal FROM virustotalscans GROUP BY virustotal HAVING COUNT (virustotalscan_result) = 0) Он работает, я получаю два правильных вирусных значения, которые не обнаруживают никакого антивируса. Но если я вхожу во все select, я получаю много хешей MD5, мне приходится прерывать прослушивание ... Можете ли вы помочь мне, пожалуйста, отредактируйте этот выбор, пожалуйста? – Mato

Смежные вопросы