SQL Server – 获取仅在线购买的客户的行

标签 sql sql-server

我有一个包含客户交易数据的表 (TransactionData) 和一个包含通讯订阅者客户的表 (Subscribers)。这就是我需要做的。

从 TransactionData 表中选择所有也在订阅者表中并且只在线购买产品的订阅者 (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


Subscribers
Email
customer1@mail.com
customer2@mail.com


Desired result
Email               StoreID
customer1@mail.com  50001

到目前为止,这是我的查询:

SELECT b.Email, b.StoreID
FROM TransactionData AS a
INNER JOIN Subscribers AS b
ON a.Email = b.Email
WHERE a.BoutiqueId = 50001

我不知道如何排除既在网上又在实体店购买过的客户。你能帮我解决这个问题吗?

最佳答案

SELECT t.Email , t.StoreID 
FROM TransactionData t
WHERE EXISTS (SELECT 1 
              FROM Subscribers 
              WHERE t.Email = Email)
AND NOT EXISTS (SELECT 1 
                FROM TransactionData
                WHERE t.Email = Email
                 AND StoreID <> 50001)
GROUP BY t.Email , t.StoreID 

关于SQL Server – 获取仅在线购买的客户的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398389/

相关文章:

mysql - 带有 SELECT 结果的 SQL 更新

sql - 从函数 postgresql 输出到屏幕并记录文件

sql - 在 SQL 中处理多个用户的插入和删除

sql-server - 在派生列组件中创建可为空的数字列

mysql - SQL按名称对相似表进行分组

php - 当数据库中只有一个条目时,SQL 查询返回重复项

sql - 获取每组得分前 5 行

SQL服务器: Check if variable is null and then assign statement for Where Clause

sql - 不允许 UPDATE,因为该语句更新 View "table_name",该 View 参与联接并具有 INSTEAD OF UPDATE 触发器

用于列出 SQL Server 2005 数据库中所有 View 的 Sql 查询