INNER JOIN dans UPDATE sql pour DB2
Est-il un moyen d'utiliser les jointures dans la mise à jour des déclarations pour DB2?
Google a vraiment marché pour moi sur ce un
C'est à peu près ce que je suis en train de réaliser (... à l'exception évidemment de travail ....)
update file1 inner join file2
on substr(file1.firstfield,10,20) = substr(file2.anotherfield,1,10)
set file1.firstfield = ( 'BIT OF TEXT' concat file2.something )
where file1.firstfield like 'BLAH%'
Acclamations
source d'informationauteur Hamish
Vous devez vous connecter pour publier un commentaire.
Vous ne dites pas ce que la plateforme que vous ciblez. Se référant aux tables de fichiers, cependant, m'amène à croire que vous n'êtes PAS sous DB2 pour Linux, UNIX ou Windows (LUW).
Toutefois, si vous sont sur DB2 LUW, voir la FUSION déclaration:
Pour votre exemple de déclaration, ce serait écrit que:
Veuillez noter: Pour DB2, le troisième argument de la fonction SUBSTR est le nombre d'octets de retour, pas de la position de fin. Par conséquent, SUBSTR(un.firstfield,10,20) renvoie CHAR(20). Cependant, SUBSTR(b.anotherfield,1,10) renvoie CHAR(10). Je ne sais pas si cela a été fait sur le but, mais il peut affecter votre comparaison.
Rejoint dans
update
déclarations sont non-standard et non pris en charge par tous les fournisseurs. Ce que vous essayez de faire ce qui peut être accompli avec une sous-sélection:Essayer cela et me dire ensuite les résultats:
Voici un bon exemple de quelque chose que je viens de recevoir de travail:
Mise à jour de la réponse https://stackoverflow.com/a/4184237/565525:
si vous voulez plusieurs colonnesqui peut être réalisée comme ceci:
Source: http://www.dbforums.com/db2/1615011-sql-update-using-join-subquery.html#post6257307
Juste pour mettre à jour uniquement les lignes qui correspondent aux conditions, et éviter de mettre à jour les valeurs null dans les autres lignes:
Il travaille dans une base de données DB2/AIX64 9.7.8
La documentation de référence pour l'instruction de mise à JOUR sur DB2 LUW 9.7 donne l'exemple suivant:
Les parenthèses après la mise à JOUR peut contenir plein de sélectionner, de sens pour être valable, toute instruction SELECT peut y aller.
Sur cette base, je vous suggère les suivantes:
Edit: Ian est droit. Mon premier réflexe a été d'essayer les sous-sélections à la place:
Mais je ne suis pas sûr si la concaténation serait de travailler. Il suppose également qu'il y a un mappage 1:1 entre les sous-chaînes. Si il y a plusieurs lignes qui correspondent, ça ne marcherait pas.
pour vous demander
si rejoindre donner plusieurs résultats, vous pouvez forcer la mise à jour comme ceci
modèle methode
Dans le standard SQL ce type de mise à jour ressemble à:
Avec de légères variations syntaxiques de ce genre de chose va travailler sur Oracle ou SQL Server et (bien que je n'ai pas de DB/2 exemple de la main de test) sera presque certainement travailler sur DB/2.