J'utilise Microsoft Access.
Si cette requête:
(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a
renvoie FermentId, comment mettre à jour une table différente avec cette colonne?
Exemple:
UPDATE EXAMPLETABLE
SET EXAMPLETABLE.FermentId = a.FermentId
FROM a
(SELECT FERMENT.FermentId
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a
En supposant que la sous-requête renvoie plusieurs valeurs, vous avez besoin d'une deuxième clé pour vous connecter (JOIN) entre les nouvelles valeurs et la table que vous souhaitez mettre à jour (EXAMPLETABLE).
Dans ce cas, j'essaierais quelque chose comme ceci:
UPDATE T
SET T.FERMENTID = A.FERMENTID
FROM EXAMPLETABLE AS T
INNER JOIN (SELECT FERMENT.FERMENTID,
FERMENT.OTHERID
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON FERMENT.FERMENTNAME =
[BELGIUM BEER].FERMENTID
ORDER BY [BELGIUM BEER].BEERID) AS A
ON A.OTHERID = T.OTHERID
Si ce n'est pas le cas et que la sous-requête renvoie une seule valeur, essayez quelque chose comme ceci:
UPDATE EXAMPLETABLE
SET T.FERMENTID = (SELECT FERMENT.FERMENTID
FROM FERMENT
INNER JOIN [BELGIUM BEER]
ON FERMENT.FERMENTNAME =
[BELGIUM BEER].FERMENTID
ORDER BY [BELGIUM BEER].BEERID)
Notez que dans ce cas, vous devez garantir que la sous-requête ne retournera jamais plus d'une ligne!
Je ne sais pas quelle est la relation d'EXAMPLETABLE avec vos données, mais en général.
Dans Access, la partie SET est après la jointure, ignorez également la partie sélectionnée dans l'ordre par. Devrait être quelque chose comme ça
UPDATE FERMENT
INNER JOIN ([BELGIUM BEER] ON FERMENT.FermentName = [BELGIUM BEER].FermentId)
SET EXAMPLETABLE.FermentColumn = a.FermentColumn
Si cela ne fonctionne pas, essayez de créer la jointure dans le générateur de requêtes
Il n'est pas nécessaire de définir une relation entre les deux tables. La réponse 10 (Arnoldiusss) est presque correcte et de loin la solution la plus compréhensible et la plus courte. Et le plus rapide en exécution. Mais l'exemple de code est incorrect. Le code suivant provient d'une de mes applications et fonctionne correctement dans MS Access 2013.
UPDATE table1 T1
INNER JOIN table2 T2
ON T2.Id = T1.Id
SET T1.myField = T2.myField;
Pour "The Belgian Beer Case" (j'adore cette expression ;-) ce serait:
UPDATE FERMENT AS T1
INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId
SET T1.FermentColumn1 = T2.FermentColumn1;