2008-12-18 7 views
2

Je dois mettre à jour un champ (qui est actuellement vide) en fonction d'une correspondance avec une autre table. Cela devrait être simple, mais ma syntaxe est fausse.Syntaxe de mise à jour pour Access

En SQLServer 2005, la syntaxe serait

UPDATE Facilities-NOID 
SET Facilities-NOID.ID = Facilities-ID.ID 
FROM Facilities-NOID, Facilities-ID 
WHERE [Facilities-ID].[Structure ID] = [Facilities-NOID].[Structure ID]; 

Access n'aime pas que de la ligne, mais si je le laisse sortir, il veut que chaque ID. Cela devrait être simple, mais je ne le vois pas dans l'aide MS sur la syntaxe de mise à jour.

Répondre

1

Je pense que c'est ce que vous voulez:

UPDATE Facilities-NOID 
INNER JOIN Facilities-ID ON Facilities-NOID.[Structure ID] 
    = Facilities-ID.[Structure ID] 
SET Facilities-NOID.ID= Facilities-ID.ID 

Vous êtes la mise à jour de Facilities-NOID en fonction d'une correspondance sur l'ID de structure apparaissant dans Facilities-ID.

+0

Maintenant, il demande une entrée d'un ID d'installations.StructureID (pas d'espace!). Ai-je besoin d'une sorte de select * de Facilities-ID? – thursdaysgeek

+0

Ah, j'ai eu une faute de frappe! Cela a fonctionné. Je vous remercie. – thursdaysgeek

+0

L'optimiseur de requête Jet optimise une jointure explicite et une jointure implicite à l'aide d'une clause WHERE exactement la même. Il ne devrait donc pas y avoir de différence entre l'utilisation de la clause WHERE ou de INNER JOIN. –

0

Retirez la clause FROM complètement

UPDATE Facilities-NOID 
SET Facilities-NOID.ID = Facilities-ID.ID 
WHERE [Facilities-ID].[Structure ID] = [Facilities-NOID].[Structure ID]; 

(c'est la façon que le générateur de requêtes finit par les construire)

+0

Lorsque j'exécute la requête, elle demande une valeur de paramètre. Il veut que FacilitiesID.ID. Je veux qu'il mette à jour toute la table avec les valeurs de l'autre table. – thursdaysgeek

+0

Avez-vous essayé de placer des crochets autour des noms de vos tables, comme dans [Facilities-ID] .ID? Je ne peux pas me souvenir quels caractères Access/Jet n'aiment pas dans les noms, mais peut-être que le - (par opposition au trait de soulignement _) est traité comme un espace? J'utilise toujours CamelCase, donc je n'ai jamais besoin de crochets. –