我正在做面部识别。我有一个数据库,其中包含来自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。

我想做的是一个查询,该查询从比较中选择personApersonB,而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_algoalgo_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/

10-09 00:44