2009-10-22 31 views
0

Voici une version simplifiée de mon problème:mise à jour SQL une table d'une autre table

Table 1 
Key1, lastdate, lasttranstype 

Table2 
Table1key1, trandate, trantype 

Je veux une instruction SQL pour mettre à jour dernierDate et lasttransdate sur la table1 pour chaque enregistrement dans cette table en utilisant l'enregistrement correspondant à Tableau2 avec la dernière date

Ma base de données est en cours.

Est-ce possible (je peux bien sûr écrire un programme pour le faire mais je préfère le faire avec une instruction SQL)?

Répondre

0
update table1, table2 
set table1.lastdate = table2.trandate, table1.lasttranstype = table2.trantype 
where table1.key1 = table2.table1key1 
+0

Malheureusement, Progress n'autorise pas deux tables dans l'instruction update. J'ai également essayé mettre à jour le jeu de table (,,,) = (Sélectionner ...) mais je n'arrive pas à trouver une façon de mettre à jour une seule ligne pour chaque ligne – Leo

+0

@Leo - Vérifier ma réponse mise à jour pour une solution possible –

1

Dans T-SQL:

UPDATE Table1 
SET lastdate = trandate, lasttranstype = trantype 
FROM Table1 INNER JOIN Table2 ON Table1.Key1 = Table2.Table1Key1 

EDIT: je ne savais pas que les progrès étaient le nom d'un SGBDR. Est-ce que ce qui suit fonctionnerait pour vous?

UPDATE Table1 
SET lastdate = 
(SELECT trandate FROM Table2 WHERE Table2.Table1Key1 = Table1.Key1), 
lasttranstype = 
(SELECT trantype FROM Table2 WHERE Table2.Table1Key1 = Table1.Key1) 
+0

AFAIK, UPDATE avec JOIN ne fonctionne que dans T-SQL. Ce n'est certainement pas ANSI SQL. –

+0

J'ai mis à jour la réponse –