简体   繁体   中英

Inactive customers mysql query optimization

I have a customer table with million of records. Customer

id | name | ..... 

I also have an orders table with

id | custID | orderDate | ....

I need to find all the people who have not placed an order for more than 30 days.It should also include people who have never placed the order

select name,customer.id from customer where id in 

(select custID from orders where datediff(curdate(),orders.orderDate) > 30 )

union

select name,customer.id from customer  left join orders on customer.id = orders.custID where orders.id is null

How can i optimize the query ?

Try

select name,t.id 
  from customer t where 
    not exists (
        select 1 
          from orders where 
          custID=t.id
          and
          datediff(curdate(),orders.orderDate) <= 30 )

Try this one

Select Customer.Custid,
Customer.name
from Customer
left join orders on 
customer.custid = orders.custid and
datediff(getdate(),orders.orderdate)>30)

where 
orders.id is null

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM