我已经四处寻找,但没有发现任何看似完全相关的东西,所以我要求一些帮助。
我有一个包含订单的单个表,人们可以拥有多个订单。我需要能够选择2年前(2012年4月)他们从未购买过的人,因为没有唯一的客户ID,因此我找到了使用电子邮件地址的独特人士。这是订单表字段:
orderid,order date,name,email
我的SQL知识有限,但我之前的方法是输出2012年4月的订单表和2012年5月到现在的另一个表。然后我比较了两个表来找到自那以后没有订购的客户。
我不禁觉得在一个查询中有更有效的方法可以做到这一点。有人可以帮忙吗?
谢谢, 萨姆。
答案 0 :(得分:3)
我会在这里使用LEFT JOIN:
SELECT DISTINCT order1.email
FROM `order` order1
LEFT JOIN (SELECT email FROM `order` WHERE orderdate >= '2012-05-01') order2
ON order1.email = order2.email
WHERE orderdate < '2012-05-01'
AND order2.email IS NULL;
主要查询是检查2012年5月之前订购的人员,LEFT JOIN
查询正在检查(order2.email IS NULL
)以查找从那时起未订购过的人。
答案 1 :(得分:-1)
您可以编写此查询而无需任何类似的联接: -
select email
from order
where email not in (select email from order where order_date >"April 2012")
and order_date < "April 2012";
在这里,第一个条件过滤掉了过去两年内购买的所有客户,从第二个条件过滤了两年前购买过的客户。
根据建议,使用NOT EXISTS
的查询将如下所示:
select o1.email
from order o1
where not exists (select 1 from order o2 where o2.order_date > "April 2012" and o1.email = o2.email)
and o1.order_date < "April 2012";