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 :

Supprimer les doublons dans une vue


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut Supprimer les doublons dans une vue
    Bonjour,
    J'ai 2 bases Oracle distinctes DB1 et DB2, chacune contenant une table DOSSIER (qui a le même schéma dans les 2 bases), et chaque table DOSSIER étant alimentée par le même système.
    Pour un outil d'administration, je dois regrouper dans une table DOSSIER d'une base DB3 le contenu des 2 tables DOSSIER des bases DB1 et DB2.

    Le principe retenu est d'utiliser une "Materialized View" que je crée comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE MATERIALIZED VIEW DB3.DOSSIER
    REFRESH COMPLETE ON DEMAND
    WITH PRIMARY KEY
    AS 
    select DOSSIER.* from DOSSIER@DB1
    UNION
    select DOSSIER.* from DOSSIER@DB2
    DB1 et DB2 sont des DB_LINKS que je créé précédemment. Cela marche bien sauf je voudrais ne garder qu'un exemplaire des lignes ayant la même clé primaire.

    Par exemple, si j'ai ceci dans DB1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DOS_ID  DOS_VERSION  DOS_TYPE
    10         1            SV
    11         3            FV
    et ceci dans DB2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DOS_ID  DOS_VERSION  DOS_TYPE
    10         2            SV
    12         4            FV
    la requete de la "Materialized View" va me renvoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DOS_ID  DOS_VERSION  DOS_TYPE
    10         1             SV
    10         2             SV
    11         3             FV
    12         4             FV
    Je voudrais que la ligne ayant 10 pour clé primaire ne soit présente qu'une fois (la ligne présente dans DB1, pas celle de DB2)

    Quel est la meilleure requête pour arriver à ce résultat ?

    Merci d'avance

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Bonjour,

    Qu'est ce que donne cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DOSSIER.* FROM DOSSIER@DB1
    UNION
    SELECT DOSSIER.* FROM DOSSIER@DB2 d2
    where not exists (select 1 from DOSSIER@DB1 d1 where d1.DOS_ID=d2.DOS_ID)
    Normalement tu dois pouvoir remplacer UNION par UNION ALL.

  3. #3
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Bonjour, le problème de doublon est résolu en utilisant la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DOSSIER.* FROM DOSSIER@DB1
    UNION
    SELECT DOSSIER.* FROM DOSSIER@DB2 d2
    WHERE DOS_ID NOT IN (select DOS_ID from DOSSIER@DB1)
    Cependant, je souhaite maintenant utiliser un refresh rapide plutot qu'un refresh complet en creant ma vue comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE MATERIALIZED VIEW DB3.DOSSIER
    REFRESH FAST ON DEMAND
    WITH PRIMARY KEY
    AS 
    SELECT DOSSIER.* FROM DOSSIER@DB1
    UNION
    SELECT DOSSIER.* FROM DOSSIER@DB2 d2
    WHERE DOS_ID NOT IN (select DOS_ID from DOSSIER@DB1)
    J'ai bien créé avant mes snapshots log pour les tables DOSSIER mais j'ai l'erreur ORA-12015: impossible de créer une vue matérialisée de régénération rapide à partir d'une interrogation complexe

    Est-ce l'opérateur UNION ou bien la présence d'une sous-requête imbriquée qui provoque cette erreur ?

  4. #4
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    en fait, le REFRESH FAST impose bcp de restrictions et notamment : on ne peut pas utiliser de requete imbriquée (comme le NOT IN), ni les UNION, ni les SYSDATE, ....
    Donc je vais devoir trouver une autre solution

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

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Supprimer les doublons dans une table
    Par lelectronique.com dans le forum Requêtes
    Réponses: 7
    Dernier message: 15/10/2008, 14h33
  3. Supprimer les doublons dans une table!
    Par Kirou dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/06/2008, 15h37
  4. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12

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