我一直在努力解决这个问题。我有两张桌子。一张带有优惠券和发票号码。一种带有发票编号和客户姓名。
我需要获取没有使用给定优惠券的客户。
以下是表格:
促销表:
Promotions
Invoice | Coupon
----------------
1 | couponA
2 | couponB
3 | couponB
订单表:
Orders
Invoice | Customer
------------------
1 | Jack
2 | Jack
3 | Jill
所以杰克使用了优惠券 A 和 B。而吉尔只使用了优惠券 B。
如果我的查询是选择没有使用优惠券 A 的客户,我应该得到 Jill。
这行得通,但它似乎笨拙和缓慢。有没有更好的办法?
SELECT Customer
FROM Promotions INNER JOIN Orders
ON Promotions.Invoice = Orders.Invoice
WHERE Customer NOT IN(
SELECT Customer
FROM Promotions INNER JOIN Orders
ON Promotions.Invoice = Orders.Invoice
WHERE Coupon = couponA)
GROUP BY Customer
感谢您的关注!
编辑:这是一个 SQLFiddle 架构 http://sqlfiddle.com/#!2/21d31/6