Я исследовал и не нашел способа запуска операций INTERSECT и MINUS в MS Access. Существует ли какой-либо способ
Как я могу выполнять операции SQL INTERSECT и MINUS в MS Access
Ответ 1
INTERSECT - это внутреннее соединение. MINUS - это внешнее соединение, в котором вы выбираете только записи, которые не существуют в другой таблице.
<Б > Intersect
select distinct
a.*
from
a
inner join b on a.id = b.id
МИНУС
select distinct
a.*
from
a
left outer join b on a.id = b.id
where
b.id is null
Если вы отредактируете исходный вопрос и разместите некоторые данные образца, тогда можно указать пример.
РЕДАКТИРОВАТЬ: Забыл добавить в отдельный запрос.
Ответ 2
INTERSECT НЕ ВХОДЯЩИЙ ПРИСОЕДИНЯЙТЕСЬ. Они разные. INNER JOIN предоставит вам повторяющиеся строки в случаях, когда INTERSECT WILL нет. Вы можете получить эквивалентные результаты:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
on a.PK = b.PK
Обратите внимание, что PK должен быть столбцом или столбцами первичного ключа. Если на столе нет PK (BAD!), Вы должны записать его так:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2
AND a.Col3 = b.Col3 ...
С помощью MINUS вы можете сделать то же самое, но с LEFT JOIN и условием WHERE, проверяющим значение null на одном столбце b, не являющемся NULL-столбцом (предпочтительно первичный ключ).
SELECT DISTINCT a.*
FROM a
LEFT JOIN b
on a.PK = b.PK
WHERE b.PK IS NULL
Это должно сделать это.
Ответ 3
Они сделаны через JOINs. Старомодный способ:)
Для INTERSECT вы можете использовать INNER JOIN. Довольно просто. Просто нужно использовать GROUP BY или DISTINCT, если у вас нет чистых отношений один к одному. В противном случае, как отмечали другие, вы можете получить больше результатов, чем ожидали.
Для MINUS вы можете использовать LEFT JOIN и использовать WHERE, чтобы ограничить его, чтобы вы только возвращали строки из своей основной таблицы, которые не совпадают с таблицей LEFT JOINed.
Легкий peasy.
Ответ 4
К сожалению, MINUS не поддерживается в MS Access - одним из способов было бы создать три запроса: один с полным набором данных, который вытягивает строки, которые вы хотите отфильтровать, а третий, который оставил, соединяет две таблицы и только тянет записи, которые существуют только в вашем полном наборе данных.
То же самое касается INTERSECT, за исключением того, что вы делаете это через внутреннее соединение и только возвращаете записи, которые существуют в обоих.
Ответ 5
Я считаю, что это делает МИНУС
SELECT DISTINCT
a.CustomerID,
b.CustomerID
FROM
tblCustomers a
LEFT JOIN
[Copy Of tblCustomers] b
ON
a.CustomerID = b.CustomerID
WHERE
b.CustomerID IS NULL