2014-11-14 3 views
1

У меня есть две таблицы: «PartNumberX» и «MasterPartTable». Моя конечная цель - извлечь определенные поля из «MasterPartTable», используя запросы, чтобы получить список уникальных номеров деталей («MasterPartTable» имеет дубликаты). Я смог успешно получить все поля, которые я хотел, кроме одного, используя метод SELECT DISTINCT. К сожалению, последний столбец «Название детали» неаккуратно создан (кем-то другим), а некоторые названия деталей имеют запятую, где одинаковый номер детали не может быть, например. «Assembly, The Thing» и «Assembly The Thing» имеют одинаковый номер детали, поэтому я хочу только одного из них. Моя идея состояла в том, что я смог бы вставить хорошие данные в таблицу, а затем запустить запрос на обновление, который использует DLookup для поиска имени детали, используя номер детали в «PartNumberX», чтобы найти соответствующее имя части из «MasterPartTable» «но я не могу заставить его работать.Как использовать DLookup В запросе обновления

Когда я использую запрос на обновление ниже, он возвращает то же количество пустых полей, что и в «PartNumberX».

UPDATE PartNumberX 
SET PartNumberX.[Part Name] = DLookUp("[MasterPartTable].[Part_Name]","MasterPartTable","MasterPartTable.Part_Number = PartNumberX.Part_Number"); 

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

Edit-

Используя второй метод из HansUp я получил следующее:

UPDATE MasterpartsTable INNER JOIN PartNumberX ON MasterpartsTable.Part_Number= PartNumberX.Part_Number SET PartNumberX.[Part Name] = [MasterpartsTable].[Part_Name];

Какие результаты в пустой запрос.

Edit2-

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

ответ

3

Опция DLookup критерии ...

"MasterPartTable.Part_Number = PartNumberX.Part_Number" 

... ссылается на имя поля (PartNumberX.Part_Number). Вам нужно значение поля вместо имени.

Используйте запрос SELECT для разработки логики и синтаксиса. После того, как вы вернете правильные данные, вы можете адаптироваться как запрос UPDATE.

Если Part_Number является числовым типом данных ...

SELECT 
    [Part Name], 
    Part_Number, 
    DLookUp(
     "Part_Name", 
     "MasterPartTable", 
     "Part_Number = " & Part_Number 
    ) AS master_part_name 
FROM PartNumberX; 

Если Part_Number это текст тип данных, включают в себя цитаты ...

"Part_Number = '" & Part_Number & "'" 

Однако, я подозреваю, что вы могли бы избежать DLookup путем присоединения этих двоих столы. Если SELECT запрос выравнивает данные правильно, преобразовать его в UPDATE:

SELECT 
    p.[Part Name], 
    p.Part_Number, 
    m.Part_Number, 
    m.Part_Name 
FROM 
    PartNumberX AS p 
    INNER JOIN MasterPartTable AS m 
    ON p.Part_Number = m.Part_Number; 

UPDATE на основе INNER JOIN может быть заметно быстрее, чем версия DLookup, особенно если поле присоединиться (Part_Number) индексируется.

Смежные вопросы