MySQL:在三个月内抓取并且没有抓住任何行

时间:2012-11-10 23:14:25

标签: mysql

SELECT users.email FROM users
INNER JOIN orders
ON orders.user_id = users.id
WHERE orders.status = 'new'
AND orders.date_created > three months back?

我想抓住所有未在3个月内在我网站上发布订单的用户电子邮件。因此,如果3个月内没有订单,请抓住电子邮件。

date_created是TIMESTAMP类型。所以一个例子是:2012-11-10 23:54:20

另外,我想查询一下根本没有订单的用户电子邮件查询(订单表中没有行)?

我尝试过:

SELECT users.email FROM users
    WHERE users.id NOT IN (select user_id from orders where user_id = users.id and orders.status = 'new')

但它似乎无论如何都会抓住用户的订单?

1 个答案:

答案 0 :(得分:1)

  1.   

    我想抓住所有未在3个月内在我网站上发出订单的用户电子邮件。

    按用户对订单进行分组,并过滤​​最近订单超过3个月前的订单的结果:

    SELECT   users.email
    FROM     users JOIN orders ON orders.user_id = users.id
    GROUP BY orders.user_id
    HAVING   MAX(orders.date_created) < CURRENT_DATE - INTERVAL 3 MONTH;
    
  2.   

    另外,我想查询一下根本没有订单的用户电子邮件查询(订单表中没有行)?

    为位于交叉点之外的记录创建外部联接和过滤器:

    SELECT   users.email
    FROM     users LEFT JOIN orders ON orders.user_id = users.id
    WHERE    orders.user_id IS NULL