2015-11-08 92 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的東西......可以這麼說。謝謝! –