我正在做面部识别。我有一个数据库,其中包含来自A组和来自B组的人员。我想检查A中的每个人与B中的每个人。我正在运行许多不同的算法来验证面孔。为此,我设置了以下表格
comparison (
id int,
personA_id int,
personB_id int,
)
facerecScore (
id int,
score int,
comparison_id int,
algo_id int,
)
因此,可以说我有一个特征脸程序正在运行,这是我正在测试的第一个算法。特征脸的
algo_id
为1。我想做的是一个查询,该查询从比较中选择
personA
和personB
,而facerecScore
表中不存在现有记录,其中algo_id
为1,比较就是该比较。换句话说,如果我已经在这两个人身上运行过特征脸,那么我就不想再运行它了。因此,我不想选择在
facerecscore
表中已经有记录且algo_id
为1的比较 最佳答案
您可以尝试以下类似方法,以找到comparison
中所有在参数facerecScore
给定的algo_id
中没有记录的行。
SELECT *
FROM comparison
WHERE id not in (
SELECT comparison_id
FROM facerecScore
WHERE algo_id = :current_algo
);
在您要查找所有
:current_algo
在algo_ids
中没有对应记录的所有比较行的情况下,可以使用类似以下的内容。SELECT *
FROM comparison, (SELECT algo_id FROM facerecScore GROUP BY algo_id) algo
WHERE id not in (
SELECT comparison_id
FROM facerecScore
WHERE algo_id = algo.algo_id
);
简单地,此查询首先查找
facerecScore
行和comparison
的所有组合,然后从结果集中删除在algo_id
中有记录的任何组合。关于mysql - MYSQL在where子句中使用count(1)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16154725/