У вас есть эти таблицы:
ЗАПИСЬ (ID, ИМЯ)
ДОЛЯ (ID, значение) * * тысяча одна
Если ваш движок SQL поддерживает ЛЕВЫЕ ВНЕШНИЕ СОЕДИНЕНИЯ, лучший способ:
SELECT RECORD.* FROM RECORD LEFT OUTER JOIN SHARE WHERE RECORD.ID=SHARE.ID
WHERE SHARE.ID IS NULL
Важно
разместить индекс на SHARE.ID
Как это работает:
SQL Engine охватывает всю таблицу RECORD, ищущую запись в SHARE, для каждой записи в RECORD, если найдена «связанная» запись в SHARE, где условие where равно false, поэтому запись не включается в набор результатов, если нет записей находятся в разделе share, где условие true, а RECORD. * включен в набор результатов. Это работает благодаря LEFT OUTER JOIN.
Примечание:
Другой способ сделать то же самое - использовать WHERE RECORD.ID NOT IN (ВЫБЕРИТЕ ID ИЗ SHARE).
Обратите внимание, что в зависимости от используемого вами механизма sql это может привести к серьезным проблемам с производительностью, поскольку внутренний механизм может запускать (SELECT ID FROM SHARE) один раз для каждой записи в таблице RECORD.