从2个表中获取所有不存在的mysql

时间:2017-03-06 03:05:48

标签: mysql

嗨我有2张桌子:
客户
发票

我想找到过去6个月内没有按月向我购买的所有客户。这就是我现在所拥有的:

SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM invoices WHERE invoices.customerid = customers.customerid AND month(invoices.fdate) = '2')

它继续运行10分钟,但仍然没有结果。我在想,即使我的语法有效,我也必须每月进行一次,然后手动将其从客户表中删除。

有更好的解决方案吗?所有帮助赞赏。感谢

1 个答案:

答案 0 :(得分:0)

您的查询并不是您想要的。正确措辞的人可能会更好地工作:

SELECT c.*
FROM customers c
WHERE NOT EXISTS (SELECT 1
                  FROM invoices i
                  WHERE i.customerid = c.customerid AND 
                        i.fdate >= CURDATE() - interval 6 month
                 );

对于此版本,您需要invoices(customerid, fdate)上的索引。

您也可以尝试一下:

SELECT c.*
FROM customers c JOIN
     (SELECT customerid, MAX(fdate) as max_fdate
      FROM invoices i
      GROUP BY customerid
     ) i
     ON i.customerid = c.customerid
WHERE i.max_fdate < CURDATE() - interval 6 month;