我試圖從SQL查詢中獲取選擇的反轉。這裏是我的情景,我選擇與查詢有關的家庭付款,並且在過去6個月內已經捐款的人被認爲是活躍的。我對過去6個月沒有進入的人感興趣。MYSQL NOT IN子查詢
我可以選擇那些誰作出了捐贈在過去的6個月:
SELECT ppl.plg_FamID
FROM pledge_plg AS ppl
WHERE ((DATEDIFF(NOW(), ppl.plg_date) < 180))
我得到一個錯誤(「內部服務器錯誤」),當我嘗試選擇誰沒有做的那些捐款。我用上面的代碼子查詢語句中的NOT IN內部功能如下:
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
在這個問題上的任何洞察力表示讚賞。