I have to join 2 tables which are currently holding more than 200K data each. I have members and orders table. I would like to get members who didn’t order anything.
I tried following SQL queries;
Structure (just listing what I need)
ORDERS MEMBERS
id id
member_id fullName
email
landLine
cellPhone
Query1
$sql = 'SELECT '.PREFIX.'members.fullName
, '.PREFIX.'members.email
, '.PREFIX.'members.landLine
, '.PREFIX.'members.cellPhone, ';
$sql .= 'FROM '.PREFIX.'members';
$sql .= 'LEFT JOIN ';
$sql .= PREFIX.'orders';
$sql .= ' ON ';
$sql .= PREFIX.'members.id = '.PREFIX.'orders.member_id';
$sql .= ' WHERE '.PREFIX.'orders.member_id IS NULL LIMIT 50';
Query 2
$sql2 = 'select id, fullName, email, landLine, cellphone
from '.PREFIX.'members
where '.PREFIX.'members.id not in
(select member_id from '.PREFIX.'orders)
LIMIT 50';
Query 3
$sql3 = 'select id, fullName, email, landLine, cellphone
from '.PREFIX.'members m
where not exists
(select null from '.PREFIX.'orders o where s.members_id = o.id)
LIMIT 50';
All 3 queries so far didn’t work. More than a minute passed, I am still waiting for the results.
What is the most elegant way to do this? Which one is faster and using less resources? I don’t see anything wrong here why it would work but for some reason it just can’t list.
Thank you for your help in advance.
I should try
Be sure to put indexes on
members.idandorders.member_id.