J'ai une liste de produits dans la table, les produits. Cela peut contenir plus de 5 millions d'enregistrements.Mise à jour d'une colonne à l'aide des valeurs d'une table de recherche
prod_code prod_region prod_desc prod_type
------------------------------------------------------
1001 R2 r2 asdasa
1001 R1 r1 erfffv
1002 R4 r4 vfdser
1003 R2 r2 sdfdfv
prod_code et prod_region ne sont pas Nullable.
J'ai besoin de mettre à jour le type prod dans cette table, en sélectionnant dans une autre table de recherche, type_produit.
prod_type prod_code prod_region
-----------------------------------
1 1001
2 1002
2 1003
3 1001 R1
Dans cette table, prod_region peut être null. Si elle est nulle, elle devrait être interprétée comme Anything.
donc ma table de produits mis à jour doit être,
prod_code prod_region prod_desc prod_type
------------------------------------------------------
1001 R2 r2 asdasa 1
1001 R1 r1 erfffv 3
1002 R4 r4 vfdser 2
1003 R2 r2 sdfdfv 2
Explication de la sortie désirée.
- Pour prod_code = 1001, il y a deux entrées dans product_type. prod_type = 3 pour prod_region spécifique 'R1' et prod_type = 1 pour le reste des régions. Ainsi, les deux premiers enregistrements dans les produits devraient obtenir 1 et 3 respectivement.
- Pour prod_code 1002, 1003, il n'y a pas de prod_region spécifiée dans la table product_type. Donc les troisième et quatrième enregistrements sont assignés à prod_type = 2 indépendamment de la région prod_.
La déclaration de fusion suivante échoue en raison de ORA-30926: unable to get a stable set of rows in the source tables
dans Oracle ou Failure 7547 Target row updated by multiple source rows.
dans Teradata.
merge into products
using product_type
on (products.prod_code = product_type.prod_code
and products.prod_region = coalesce(product_type.prod_region,products.prod_region)
)
when matched then update
set products.prod_type = product_type.prod_type;
Vous recherchez une réponse spécifique SQL ou Teradata standard.