/* Select all rows from left table which aren't in right table. SELECT l.* FROM t_left l LEFT JOIN t_right r ON r.value = l.value WHERE r.value IS NULL */ /* TODO Add another layer of JOINs to show the value where name='Received' for the missing hashes. Maybe we can parse dates from there. */ SELECT h.hash, h.name, substring(h.value, 0, 40) FROM header h INNER JOIN ( SELECT l.hash FROM original l LEFT JOIN ( SELECT hash FROM search_header WHERE name = 'Date' ) r ON r.hash = l.hash WHERE r.hash IS NULL ) missing ON missing.hash = h.hash WHERE -- name IN ('Subject', 'Received', 'Date') name IN ('From', 'Subject') ORDER BY h.value ;