Sql 如何选择同一表格中不同行的空数据?

Sql 如何选择同一表格中不同行的空数据?,sql,select,sqlite,Sql,Select,Sqlite,我有这三个表(我附加了一个预览)。列表末尾是表“virustotalscans”中的数据示例。有一列名为“virustotal”。每个唯一的样本都有编号,例如165,下一个样本有编号166等等 表VIRUTOTALS CREATE TABLE virustotals ( virustotal INTEGER PRIMARY KEY, virustotal_md5_hash TEXT N

我有这三个表(我附加了一个预览)。列表末尾是表“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);
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

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

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”中的数据示例:

现在,我需要选择“virustotalscan\u 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哈希…可能是因为所有样本都至少包含一行,这是空的。这是合乎逻辑的,因为某些防病毒软件总是检测不到某些样本

更好的示例:。现在我需要选择sample-number(virustotal列),其中virustotalscan_result列中的所有行都为空。例如,它只能是数字2

你能帮我吗


非常感谢您的回复。

您的
pastebin
中似乎只有一个表的示例。如果您在SQL FIDLE中重新创建示例表,您可能会得到更好更快的响应[.如何定义
样本
?样本是用表VIRUSTOTALSCANS中的virustotal列定义的,这是编号165。这是一个样本,下一个样本有其他编号。因此更好的示例:。现在我需要选择样本-编号(virustotal列),其中virustotalscan\u列中的所有.line都是空的。例如,它可以是数字2…谢谢,但它仅适用于后面的部分,而不是括号中的选择…因此它仅适用于表virustotalscan。您的评论缺少任何信息,无法让我改进答案。很抱歉,我在后面写了长时间。如果我使用“按具有计数的virustotalscan”从virustotalscan组中选择virustotal(virustotalscan\u结果)=0)它可以工作,我得到两个正确的virustotal值,这两个值没有检测到任何杀毒软件。但是如果我输入all select,我得到很多MD5哈希,我必须中断监听…你能帮我编辑这个选择吗?使用
select download\u MD5\u hash,virustotal FROM…
。除了这两个virustotal值之外,你还有其他值吗?谢谢,但是如果我使用你的修改,我只得到与其他列相同的结果-virustotal…:-(所以我得到所有值,我必须插入侦听…我只需要得到两个正确的值,如果我只使用括号中的select,我就得到了,但现在我需要用MD5哈希获得这些值。。。
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)