2014-09-15 2 views
0

j'ai deux tables, pinfo et adresseinstruction SQL pour mettre à jour champ clé

pinfo:

pnumber varchar 
myunikey INTEGER (unikey) 
systemid integer 

Adresse:

amyPinfoKey INTEGER (new row with NULL val) 
anumber varchar (connects to to pinfo.pnumber) 

(pas toutes les lignes se connecter à la table pinfo - certaines lignes ont aucun lien)

Je suis en train d'exécuter une commande SQL qui définira address.amyPinfoKey = pinfo.myunikey que si address.anumber = pinfo.pnumber

la partie la plus délicate est que pinfo.pnumber peut être dupliqué donc j'ai besoin que l'un des matchs sur pinfo.myunikey (peu importe laquelle)

J'utilise une base de données DB2

+0

double possible de [? Comment mettre à jour un seul enregistrement dans DB2] (http://stackoverflow.com/questions/ 8735428/comment-mettre-à-jour-juste-un-enregistrement-en-db2) – Bulat

+0

merci ... c'est répondre à ma question – user986474

Répondre

0
UDATE address 
SET address.amyPinfoKey = (SELECT myunikey = (SELECT myunikey 
          FROM (SELECT MAX(myunikey) AS myunikeyMax, 
             pnumber  AS pnumberMax 
            FROM pinfo 
            GROUP BY pinfo.pnumber) AS pinfoMax, 
           pinfo 
          WHERE pinfoMax.pnumberMax = pinfo.pnumber 
           AND pinfoMax.myunikeyMax = pinfo.myunikey 
           AND address.anumber = pinfo.pnumber) 

J'espère que cela peut vous aider, c'est une question distincte. Et il y a des déclarations de mise à jour typique

update tableA set tableA.ColA = (
            select tableB.colA 
            from tableB 
            where tableB.id = tableA.id 
           -- and some other conditon 
           ) 
where condition 

et comme ceci:

update (select tableA.colA,tableB.colA newA 
     from tableA,tableB 
     where tableA.id = tableB.id 

    ) 
set colA = newA 
Questions connexes