Почему меня спрашивают «Введите значение параметра» при выполнении запроса на обновление в MS Access? - PullRequest
0 голосов
/ 29 октября 2018

Я боролся со своим запросом и не знаю, что с ним не так. Я не продвинутый пользователь SQL, но я немного разбираюсь в SQL.

У меня есть две таблицы, и я пытаюсь обновить одно поле с полем из другой таблицы. У них нет уникального идентификатора в каждом, поэтому их необходимо сопоставлять с тремя полями (HoleID, From, To), особенно потому, что таблица LEAPFROG_Lithology имеет больше записей, которые не имеют одинаковые значения From / To, чем в таблице Lithology.

Я искал вопросы, заданные по сходной теме, и пробовал другой вариант моего запроса, но ни один из них не работает, и он всегда запрашивает у меня «Ввести значение параметра». Я пытался с внутренним соединением, как в этом один и один , но это не сработало.

Вот что я попробовал:

Версия 1

Update LEAPFROG_Lithology 
SET LEAPFROG_Lithology.Primary_litho = (
SELECT Lithology.Primary_litho 
FROM Lithology
RIGHT JOIN LEAPFROG_Lithology ON (
    Lithology.[HoleID] = LEAPFROG_Lithology.[HoleID] and 
    Lithology.[From_m] = LEAPFROG_Lithology.[From_m] and 
    Lithology.[To_m] = LEAPFROG_Lithology.[To_m])) 
Where LEAPFROG_Lithology.Primary_litho is null  ;

Версия 2 (пробовал также с INNER JOIN)

Update LEAPFROG_Lithology
LEFT JOIN Lithology ON (
    LEAPFROG_Lithology.[HoleID] = Lithology.[HoleID] and 
    LEAPFROG_Lithology.[From_m] = Lithology.[From_m] and 
    LEAPFROG_Lithology.[To_m] = Lithology.[To_m]) 
SET LEAPFROG_Lithology.Primary_litho = Lithology.Primary_litho 
Where LEAPFROG_Lithology.Primary_litho is null  ;

Я пробовал с [] везде, ни с одним. Это не имеет значения.

Может кто-нибудь сказать мне, что я делаю не так? Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Пожалуйста, проверьте правильность названий таблиц и полей. Если это так, второй запрос должен работать.

Но я предлагаю использовать несколько иные скобки, чтобы вы могли отобразить графическое представление запроса. Кроме того, нет необходимости использовать LEFT JOIN, потому что для записей, которые не имеют Primary_litho и не имеют подходящей литологии, значение NULL будет обновлено значением NULL. Так что это должно работать без проблем:

UPDATE LEAPFROG_Lithology
INNER JOIN Lithology ON 
   (LEAPFROG_Lithology.[HoleID] = Lithology.[HoleID]) AND
   (LEAPFROG_Lithology.[From_m] = Lithology.[From_m]) AND
   (LEAPFROG_Lithology.[To_m] = Lithology.[To_m])
SET LEAPFROG_Lithology.Primary_litho = Lithology.Primary_litho 
WHERE LEAPFROG_Lithology.Primary_litho Is Null;
0 голосов
/ 29 октября 2018

Прежде чем использовать JOIN, убедитесь, что обе ваши таблицы могут образовать отношения, вам нужно убедиться, что ваш PRIMARY KEY в одной таблице соответствует FOREIGN KEY в другой таблице, чтобы присоединиться к ним.

Access позволяет использовать представление конструктора для создания запросов, которые могут быть простыми, если вы не владеете SQL. Как только вы создадите его визуально, вы можете переключиться в представление SQL, чтобы найти код.

enter image description here enter image description here

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