Доступ Добавить запрос дублирует результаты - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть запрос на добавление

INSERT INTO SPLIT_EXPORT_X2_LOANNOTPRESENT
SELECT SPLIT_EXPORT_X2_2.*
FROM SPLIT_EXPORT_X2_2, IMPORT_CSV
WHERE (((SPLIT_EXPORT_X2_2.coll_key) Not In (Select [LoanIdentifier] from [IMPORT_CSV])));

Предполагается добавить что-либо из таблицы SPLIT_EXPORT_X2_2, которая не отображается в IMPORT_CSV на основе идентификатора ссуды.

В таблице X2 много столбцов, и мне нужно, чтобы они все были добавлены.

В качестве примера проблемы, если в таблице IMPORT_CSV содержится 20 строк, и необходимо добавить 1 строку.он добавит 20 копий этого ряда.кажется, что он делает проверку WHERE в каждой строке и добавляет, когда она не совпадает.Обычно группа решает это, но доступ сообщает мне, что я не могу group by, если я добавляю звездочку.Я должен был бы перечислить все столбцы и дать конкретный group by.

Есть ли что-то еще, что можно сделать вместо этого?

1 Ответ

0 голосов
/ 21 декабря 2018

Вам не нужно IMPORT_CSV в предложении FROM, только в подзапросе:

INSERT INTO SPLIT_EXPORT_X2_LOANNOTPRESENT
    SELECT SPLIT_EXPORT_X2_2.*
    FROM SPLIT_EXPORT_X2_2
    WHERE (((SPLIT_EXPORT_X2_2.coll_key) Not In (Select [LoanIdentifier] from [IMPORT_CSV])));

Я также рекомендую использовать NOT EXISTS вместо NOT IN:

INSERT INTO SPLIT_EXPORT_X2_LOANNOTPRESENT
    SELECT SPLIT_EXPORT_X2_2.*
    FROM SPLIT_EXPORT_X2_2
    WHERE NOT EXISTS (SELECT 1
                      FROM IMPORT_CSV
                      WHERE SPLIT_EXPORT_X2_2.coll_key = IMPORT_CSV.[LoanIdentifier]
                     );

NOT IN отфильтрует все строки, если любое значение в подзапросе равно NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...