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

Oracle Discussion :

Mise à jour de table


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut Mise à jour de table
    Salut !

    La requête qui suit est très très longue, je fais ça pour insérer les données et éviter de violer la contrainte d'unicité de personne.id.

    insert into personne
    select * from personne@base2
    where personne.id not in (select personne from personne@base2);

    Je voudrais donc éviter un :
    not in (select personne from personne@base2);

    Y a t'il une autre solution ?

    Merci d'avance,
    LaVaZza

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Oui utilise NOT EXISTS

    Mais ta requete insert rien là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from personne@base2 
    where personne.id not in (select personne from personne@base2);
    Selection des personnes de la table personne@base2 qui ne sont pas dans les personnes de la table personne@base2

    Y a un pb de saisie je pense non ?

    PS : Utiliser les balises CODE

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut

    Remplace NOT IN par un NOT EXISTS

    visiblement y'a des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into personne 
    select * from personne@base2 
    where personne.id not in (select personne.id from personne@base2);
    Dans le sous select : Rajout du .id et suppression du @base2, non?

    PS : Mieuw vaut rajouter les noms de colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    insert into personne (ID, NOM....)
    SELECT ID, NOM.... 
    FROM personne@base2 p2
    WHERE NOT EXISTS (select 1 from personne 
    WHERE id = p2.id);

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut
    Oui en fait c'est:

    insert into personne
    select * from personne@base2 p2
    where p2.id not in (select id from personne);

    Mais je vois pas trop comment utiliser le not exists là

    attends je vais deviner..

    insert into personne
    select p2.*
    from
    personne@base2 p2,
    personne p1
    where
    p2.id = p1.id (+)
    and p1.id not exists

    ???

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par McM


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    insert into personne (ID, NOM....)
    SELECT ID, NOM.... 
    FROM personne@base2 p2
    WHERE NOT EXISTS (select 1 from personne 
    WHERE id = p2.id);
    Ah je ne savais pas que le not exists pouvait prendre des parramètres...

    Et sinon ma solution marche ?

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut
    Ah on en fait c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    insert into personne 
    select p2.* 
    from 
    personne@base2 p2, 
    personne p1 
    where 
    p2.id = p1.id (+) 
    and p1.id is not null

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    insert into personne 
    select p2.* 
    from 
    personne@base2 p2, 
    personne p1 
    where 
    p2.id = p1.id (+) 
    and p1.id is NULL
    ..plutôt

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Oui ça marche aussi.

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut
    C'est même carrément plus rapide,

    sur votre requête là, je suis obligé d'attendre 3 plombes !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2005, 22h32
  2. [ASE][12.0] Mise à jour de table
    Par Lps dans le forum Sybase
    Réponses: 9
    Dernier message: 09/12/2005, 14h28
  3. Programmer la mise à jour des tables attachées
    Par _developpeur_ dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 20h29
  4. Mise à jour des tables liées + TIMESTAMP
    Par Homegrown dans le forum Access
    Réponses: 11
    Dernier message: 25/04/2005, 21h52
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24

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