SQLクエリから選択の逆を取得しようとしています。これが私のシナリオです。クエリを使用して家族に関連する支払いを選択し、過去6か月間に寄付を行った人はアクティブであると見なされます。過去6ヶ月間エントリーがない方に興味があります。
過去6か月間に寄付を行った人を次の方法で選択できます。
SELECT ppl.plg_FamID
FROM pledge_plg AS ppl
WHERE ((DATEDIFF( NOW(), ppl.plg_date ) < 180) )
寄付していないものを選択しようとすると、エラー(「内部サーバーエラー」)が発生します。次のように、NOTIN関数内の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
この問題に関する洞察をいただければ幸いです。