IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Update Selectif qui met a blanc les lignes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Par défaut Update Selectif qui met a blanc les lignes
    Utilisateur Occasionnel.

    Je souhaite mettre a jour une table contenant 4500 lignes a partir d'une table temporaire dans laquelle je ne dispose des infos que pour 1200 lignes. La requete ci dessous met à jour les 4500 lignes en mettant à blanc les lignes pour lesquelles je nais pas de correspondance avec ma table de mise a jour. je souhaiterais obtenir uniquement la mise a jour des 1200 lignes renseignés dans la table temporaire

    update adherent set adherent.num_infr = (select maj_adherent.maj_num_infr from maj_adherent
    where maj_adherent.maj_adh=adherent.num_adh);


    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    update adherent 
    set adherent.num_infr = (
      select maj_adherent.maj_num_infr 
      from maj_adherent
      where maj_adherent.maj_adh=adherent.num_adh)
    where exists (
      select maj_adherent.maj_num_infr 
      from maj_adherent
      where maj_adherent.maj_adh=adherent.num_adh) ;

  3. #3
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Bonjour,
    Moi dans ces cas là j'aime bien passer par des vues, en plus c'est plus rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    create view v_maj_adherent as
    select 
      adherent.num_adh,
      adherent.num_infr,
      maj_adherent.maj_num_infr 
    from 
      maj_adherent,
      adherent 
    where 
      adherent.num_adh=maj_adherent.maj_adh;
     
    update v_maj_adherent set num_infr=maj_num_infr;
     
    drop view v_maj_adherent;

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    aussi possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    merge into adherent using maj_adherent on (
                  adherent.num_adh=maj_adherent.maj_adh)
          when matched then
          update set num_infr =maj_adherent.maj_num_infr;

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    l'exemple de la vue est intéressante, il faut bien cependant avoir des contraintes d'intégrité référentielles, ce qui souvent n'est pas le cas dans des table temporaires.

    Pour optimiser encore et pour éviter de créer une vue, on peut utiliser une sous-requête au lieu d'une vue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    update (
      select adherent.num_infr,maj_adherent.maj_num_infr
      from maj_adherent, adherent
      where adherent.num_adh=maj_adherent.maj_adh)
    set num_infr=maj_num_infr;

Discussions similaires

  1. [AC-2010] liste deroulante qui n'affiche pas les lignes vides
    Par RodKAZ dans le forum IHM
    Réponses: 8
    Dernier message: 22/11/2012, 10h15
  2. Réponses: 10
    Dernier message: 30/01/2011, 11h53
  3. fonction qui met en liste les noms des fichiers
    Par aliassaf dans le forum Général Python
    Réponses: 2
    Dernier message: 22/06/2006, 11h50
  4. Site internet qui met en cache les pages web
    Par LFC dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 07/06/2006, 10h10
  5. tableau qui a deux couleur pour les lignes <td>
    Par abdess6600 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 23/05/2006, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo