我有一个表TransactionData
,其中包含客户的交易数据,另一个表Subscribers
包含作为简报订阅者的客户。
这就是我需要做的事情:从TransactionData
表中选择所有订阅者,这些订阅者也在Subscribers
表中,并且从未在线购买过产品(StoreID = 50001
)。
两个表的唯一键是客户电子邮件地址。
这是基本的表结构。
TransactionData
Email StoreID OrderID
customer1@mail.com 50001 101
customer1@mail.com 50001 102
customer2@mail.com 50001 201
customer2@mail.com 51111 202
customer3@mail.com 50001 301
customer3@mail.com 50001 302
订户
Email
customer1@mail.com
customer2@mail.com
期望的结果
Email StoreID
customer1@mail.com 51111
这是我目前的查询:
SELECT
b.Email, b.BoutiqueId
FROM
HasNewsletterPermission2014 AS a
INNER JOIN
TransactionData AS b ON a.Email = b.Email
WHERE
b.BoutiqueId <> 50001
我无法弄清楚如何排除从未在线购买过的客户。
你能帮我解决这个问题吗?
答案 0 :(得分:1)
您可以使用IN
:
SELECT b.Email, b.BoutiqueId
FROM HasNewsletterPermission2014 AS a
INNER JOIN TransactionData AS b
ON a.Email = b.Email
WHERE b.email not in (select email from TransactionData where BoutiqueId = 50001)
这允许您选择所有未进行在线交易的个人。
或者您可以使用EXISTS
:
SELECT b.Email, b.BoutiqueId
FROM HasNewsletterPermission2014 AS a
INNER JOIN TransactionData AS b
ON a.Email = b.Email
WHERE not exists (select td.email from TransactionData td where b.email = td.email and td.BoutiqueId = 50001)
两者都取得了相同的结果。