SQL Server:获取从未在线购买的客户的行

时间:2015-09-08 15:00:54

标签: sql-server

我有一个表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

我无法弄清楚如何排除从未在线购买过的客户。

你能帮我解决这个问题吗?

1 个答案:

答案 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)

两者都取得了相同的结果。