Вот эта таблица
O (for origin): | PText | CText |
P (products): | id | PText | ... |
C (category): | id | CText | .... |
D (destination): | pid | cid |
Что мне нужно сделать, так это найти идентификаторы продуктов с использованием O PText и идентификаторы категорий с помощью CTexts O и поместить эти идентификаторы в D
Этот запрос делает именно это:
INSERT INTO D ( pid, cid )
SELECT P.id, C.id
FROM (O INNER JOIN P ON O.PText = P.PText) INNER JOIN C ON C.CText = O.CText
WHERE P.id IS NOT NULL AND C.id IS NOT NULL AND P.id NOT IN (SELECT pid FROM D);
Проблема в том, что у О есть несколько ошибок. На всех PTexts отсутствует «0» (Microsoft решила убрать его, когда брала данные из таблицы Access и помещала их в электронную таблицу Excel). Следовательно, PText не соответствует, но "0" + PText соответствует.
Вот моя вторая попытка:
INSERT INTO D ( pid, cid )
SELECT P.id, C.id
FROM (O INNER JOIN P ON **"0" &** O.PText = P.PText) INNER JOIN C ON C.CText = O.CText
WHERE P.id IS NOT NULL AND C.id IS NOT NULL AND P.id NOT IN (SELECT pid FROM D);
Этот второй запрос не работает. Там написано Вы собираетесь обновить 0 строк.
Мой вопрос: как второй запрос может не работать, когда первый?
Примечание: используется MS ACCESS 2002