There are two ways to find rows that exist in one table but not another.
The first method is to use a subquery:
SELECT id FROM table1 WHERE id NOT IN (SELECT id FROM table2);
This approach has the advantage of being more obvious to the casual reader, at the cost of portability (you need MySQL version 4.1 to use subqueries).
Alternately, you can use a left join:
SELECT table1.id FROM table1 LEFT JOIN table2 ON (table1.id = table2.id) WHERE table2.id IS NULL;
This approach may execute faster than a subquery, and works in all versions of MySQL. It may lose clarity for those readers not familiar with table joins and null values.
Dig Deeper on Linux servers
Related Q&A from Scott Noyes
A MySQL expert offers a workaround for the lack of syntax support for full outer joins. Continue Reading
The differences between MySQL Enterprise and MySQL Community. Continue Reading
An expert explains how multiple storage engines work within MySQL. Continue Reading