Для пересечения вы можете использовать внутреннее соединение, не после пересечения, а вместо.
SELECT DISTINCT
n.id,
n.type,
n.name
FROM newtable n
INNER JOIN oldtable o
ON o.id = n.id
AND o.type = n.type;
Для кроме вы можете использовать NOT EXISTS
и коррелированный подзапрос.
SELECT DISTINCT
n.id,
n.type,
n.name
FROM newtable n
WHERE NOT EXISTS (SELECT *
FROM oldtable o
WHERE o.id = n.id
AND o.type = n.type);
Я не уверен, что вы ищете профсоюз, возможно, это работает для вас:
SELECT n.id,
n.type,
n.name
FROM newtable n
UNION
SELECT o.id,
o.type,
NULL name
FROM oldtable o
WHERE NOT EXISTS (SELECT *
FROM newtable n
WHERE n.id = o.id
AND n.type = o.type);
Он получает все записи из комбинаций newtable
и id
type
из oldtable
, которых нет в новой таблице с именем NULL
, поскольку, очевидно, нет имени для это в newtable
.