SQL Where NOT IN返回空白

SQL Where NOT IN返回空白,sql,Sql,我正在尝试获取id不在列表中的行。 我有一封带有分数的电子邮件,每个分数有几封电子邮件。我知道如何获得每封电子邮件的最大分数,然后我想删除其他行。我尝试删除不在最大分数列表中的所有行,但它不起作用 SELECT * FROM mkgaction AS a WHERE id NOT IN (SELECT id FROM (SELECT * FROM mkgaction AS

我正在尝试获取id不在列表中的行。 我有一封带有分数的电子邮件,每个分数有几封电子邮件。我知道如何获得每封电子邮件的最大分数,然后我想删除其他行。我尝试删除不在最大分数列表中的所有行,但它不起作用

SELECT * 
FROM mkgaction AS a
WHERE id NOT IN (SELECT id 
                 FROM
                     (SELECT * 
                      FROM mkgaction AS b 
                      ORDER BY `score` DESC) x
                 GROUP BY `score`)
select id返回正确的列表,但all请求不返回任何行


你知道为什么吗?

如果你的查询能正常工作,那么你可能正在使用MySQL。该数据库中的语法为:

delete ma
    from mkgaction ma join
         (select ma2.email, max(ma2.score) as max_score
          from mkgaction ma2
          group by ma2.email
         ) ma2
         on ma.email = ma2.email and ma.score < ma2.max_score;

您的查询格式不正确。您已通过分组方式选择*。请提供示例数据、所需结果、清晰的解释,并标记您正在使用的数据库。看起来sub-select将返回表中的每个id,因为其中没有WHERE子句。如果是这种情况,没有ID不在该列表中,因此它不会返回任何行。它的工作,它看起来不像我最初的要求,所以我将需要一点时间来理解它,但非常感谢@契尼维斯。这更多地基于您对问题的描述,而不是您的查询。