举个例子:我想看看我的营销工作对我在商店里销售的产品的效果如何。例如,我想知道有多少人在 2014 年 12 月 1 日收到电子邮件中的优惠券后一个月内购买了我的产品,而在同一时间段内有多少人购买了我的产品但从未收到过优惠券优惠券。
这是我的客户表的示例:

CUSTOMER_NUMBER        PURCHASE_DATE
---------------        -------------
1                      2014-12-02
2                      2014-12-05
3                      2014-12-05
4                      2014-12-10
5                      2014-12-21

这是我的电子邮件表的示例
CUSTOMER_NUMBER        EMAIL_ADDR         SEND_DATE
---------------        ------------       ----------
1                      john@abc.com       2014-12-01
3                      mary@xyz.com       2014-12-01
5                      beth@def.com       2014-12-01

我有一个很好的想法如何确定谁用优惠券购买了产品:我在两个表上使用内部联接。但是为了确定谁购买了产品,即使他们出于某种原因没有优惠券(他们没有电子邮件,他们是控制组的一部分等),我想我需要使用一个左连接得到一个结果集,然后从我的第一个结果集中减去内连接的结果。唉,这就是我被困的地方。在上面的示例中,客户 2 和 5 购买了产品,即使他们从未收到过优惠券,但我不知道如何编写查询来返回该数据。
我正在使用 IBM 的 Netezza DB。谢谢!!

最佳答案

使用 Left Outer JoinNULL 检查

SELECT C.*
FROM   customer C
       LEFT OUTER JOIN email e
                    ON C.customer_Number = E.customer_Number
WHERE  E.customer_Number IS NULL

或者使用 Not Exists
SELECT *
FROM   customer C
WHERE  NOT EXISTS (SELECT 1
                   FROM   email e
                   WHERE  c.customer_number = e.customer_number)

关于sql - 如何编写从 LEFT JOIN 结果中减去 INNER JOIN 结果的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27975960/

10-16 23:17