【发布时间】:2019-02-04 01:08:21
【问题描述】:
我在一个选择语句中加入了三个表:
表 CRM_CONTACTS 结构:
CONTACTS_ID, CONTACTS_EMAIL
1 email@email.com
2 email2@email.com
表 CRM_PRODUCTS 结构:
PRODUCTS_ID, PRODUCTS_NAME, PRODUCTS_TYPE
204 Sample free_sample
205 beginners_1 monthly_subscription
206 beginners_2 monthly_subscription
表 CRM_PRODUCTS_PURCHASE:
ID, CONTACTS_ID, PRODUCTS_ID
3 1 204
4 1 205
5 2 204
因此客户当然可以购买多种产品。
我想创建一个选择语句来选择所有购买了 PRODUCT_ID 204(免费样品)的客户,但如果他们购买了 PRODUCT_TYPE=monthly_subscription 的产品,我不希望他们出现在我的结果中
所以我想要的预期输出是 CONTACTS_ID 2 的联系人。
我对 sql 语句很陌生。这是我到目前为止得到的:
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)
【问题讨论】:
-
你的查询中是
NOT coalesce吗? -
让我们在您的表格中获取一些示例数据以供我们查看以及预期的输出。
-
不合并我使用,因为我的数据库中的 contacts_deactivated 可以是 0 或 Null