2015-11-08 147 views
1

很多客户。一些有发票。有些元记录显示了它们属于哪个电子邮件列表。MySQL查询没有相关记录的记录

我需要找到在30天内没有发票的客户(但没关系,如果他们根本没有发票,或者老的发票)并且没有一个特定的电子邮件元记录(如果他们没有元记录或其他类型的元记录)。

最近我可以算出来的查询(用简单的英语),将是一个“没有”条件:

select * from customers 
left join invoices on … 
and also left join meta on … 
NOT HAVING invoice_date > 30 days ago AND 
NOT HAVING meta_value=unwanted_list 

唉。任何人?

回答

0

那样?

SELECT * FROM customers 
LEFT JOIN invoices ON... 
LEFT JOIN meta ON... 
WHERE invoice_date < NOW() - INTERVAL 30 DAY 
AND meat_value NOT LIKE... 
+0

如果客户的发票超过30天且发票更新,则您的查询将报告该客户。 – Shadow

1

左连接是一个好主意,但你必须使用子查询。另一种解决方案是使用不存在的子查询:

select c.* from customers c 
where not exists (select 1 from invoices customer_id=c.id and invoice_date>=curdate()-30) 
and not exists (select 1 from meta_value where customer_id=c.id and meta_value=...) 
+0

完美!我不知道甚至不存在这个NOT EXISTS的东西......可以这么说。谢谢! –