I have three tables which I join in a select statement:
Table CRM_CONTACTS structure:
CONTACTS_ID, CONTACTS_EMAIL
1 email@email.com
2 email2@email.com
Table CRM_PRODUCTS structure:
PRODUCTS_ID, PRODUCTS_NAME, PRODUCTS_TYPE
204 Sample free_sample
205 beginners_1 monthly_subscription
206 beginners_2 monthly_subscription
Table CRM_PRODUCTS_PURCHASE:
ID, CONTACTS_ID, PRODUCTS_ID
3 1 204
4 1 205
5 2 204
So customers can of course buy multiple products.
I would like to make a select statement that selects all customers that bought PRODUCT_ID 204 (free sample), but I do not want to have them in my result if they bought a product of PRODUCT_TYPE=monthly_subscription
So my expected output I want is the contact with CONTACTS_ID 2.
I am pretty new to sql statements. This is what I got so far:
SELECT CRM_PRODUCTS_PURCHASE.CONTACTS_ID,CRM_PRODUCTS_PURCHASE.PRODUCTS_ID, CRM_CONTACTS.CONTACTS_EMAIL, CRM_CONTACTS.CONTACTS_LANGUAGE
FROM CRM_PRODUCTS_PURCHASE
LEFT JOIN CRM_CONTACTS ON CRM_PRODUCTS_PURCHASE.CONTACTS_ID = CRM_CONTACTS.ID
LEFT JOIN CRM_PRODUCTS ON CRM_PRODUCTS_PURCHASE.PRODUCTS_ID = CRM_PRODUCTS.ID
WHERE CRM_PRODUCTS_PURCHASE.CONTACTS_ID IN
(SELECT CRM_CONTACTS.ID
FROM CRM_PRODUCTS_PURCHASE
LEFT JOIN CRM_CONTACTS ON CRM_PRODUCTS_PURCHASE.CONTACTS_ID = CRM_CONTACTS.ID
LEFT JOIN CRM_PRODUCTS ON CRM_PRODUCTS_PURCHASE.PRODUCTS_ID = CRM_PRODUCTS.ID
WHERE CRM_PRODUCTS_PURCHASE.PRODUCTS_ID = 204 AND
CRM_CONTACTS.CONTACTS_EMAIL!='' AND
NOT coalesce(CRM_CONTACTS.CONTACTS_DEACTIVATED,0)
GROUP BY CRM_CONTACTS.CONTACTS_EMAIL
ORDER BY CRM_CONTACTS.CONTACTS_LANGUAGE)