Для вашего первого вопроса есть как минимум три общих метода на выбор:
- НЕ СУЩЕСТВУЕТ
- НЕ В
- LEFT JOIN
SQL выглядит так:
SELECT * FROM TableA WHERE NOT EXISTS (
SELECT NULL
FROM TableB
WHERE TableB.ID = TableA.ID
)
SELECT * FROM TableA WHERE ID NOT IN (
SELECT ID FROM TableB
)
SELECT TableA.* FROM TableA
LEFT JOIN TableB
ON TableA.ID = TableB.ID
WHERE TableB.ID IS NULL
В зависимости от того, какую базу данных вы используете, производительность каждой может различаться. Для SQL Server (столбцы без значения NULL):
Предикаты NOT EXISTS и NOT IN - лучший способ поиска пропущенных значений, если оба рассматриваемых столбца NOT NULL.