MYSQL不在子选择查询中

MYSQL不在子选择查询中,mysql,notin,Mysql,Notin,我正在尝试从sql查询中获取选择的相反结果。这是我的场景,我通过查询选择与家庭相关的付款,过去6个月内捐款的人将被视为活跃。我对那些在过去6个月内没有参赛作品的人感兴趣 我可以通过以下方式选择在过去6个月内捐款的人: SELECT ppl.plg_FamID FROM pledge_plg AS ppl WHERE ((DATEDIFF( NOW(), ppl.plg_date ) < 180) ) 当我试图选择那些没有捐款的人时,我收到一个内部服务器错误。我在NOT IN函数的su

我正在尝试从sql查询中获取选择的相反结果。这是我的场景,我通过查询选择与家庭相关的付款,过去6个月内捐款的人将被视为活跃。我对那些在过去6个月内没有参赛作品的人感兴趣

我可以通过以下方式选择在过去6个月内捐款的人:

SELECT ppl.plg_FamID
FROM pledge_plg AS ppl
WHERE  ((DATEDIFF( NOW(), ppl.plg_date ) < 180) ) 
当我试图选择那些没有捐款的人时,我收到一个内部服务器错误。我在NOT IN函数的subselect语句中使用上述代码,如下所示:

    SELECT pp.plg_FamID
FROM pledge_plg AS pp
WHERE pp.plg_FamID NOT IN (
        SELECT ppl.plg_FamID
        FROM pledge_plg AS ppl
        WHERE  ((DATEDIFF( NOW(), ppl.plg_date ) < 180) ) 
    )
ORDER BY pp.plg_FamID ASC, pp.plg_date DESC 
LIMIT 0, 30
完整代码如下,仅供参考

SELECT DISTINCT
    ff.fam_Envelope AS ENV, 
    ff.fam_ID AS "Family ID", 
    ff.fam_Name AS Family,
    fc.c3 AS "Active?",
    pp.plg_date,
    (DATEDIFF( NOW(), pp.plg_date ))
FROM 
    family_fam AS ff 
LEFT JOIN family_custom AS fc ON ff.fam_ID = fc.fam_ID
LEFT JOIN pledge_plg AS pp ON ff.fam_ID = pp.plg_FamID
WHERE 
    fc.c3 = "true" 
    AND pp.plg_FamID NOT IN (
        SELECT ppl.plg_FamID
        FROM pledge_plg AS ppl
        WHERE  ((DATEDIFF( NOW(), ppl.plg_date ) < 180) )
    )
ORDER BY ff.fam_ID ASC, pp.plg_date DESC 
LIMIT 0, 30

对此问题的任何见解都将不胜感激。

我将对该问题重新表述如下:

     SELECT ppl.plg_FamID
     FROM pledge_plg AS ppl
     HAVING MAX(pp.plg_date) < DATE_SUB( CURDATE(),INTERVAL 180 DAY); 

NOT IN解决方案的问题是,如果内部查询有一个或多个空值,则结果集为空。 您可以尝试在内部查询的where子句中解决此adding IS NOT NULL问题

WHERE  ((DATEDIFF( NOW(), ppl.plg_date ) < 180) ) AND ppl.plg_date IS NOT NULL