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 :

MINUS et Différence entre deux tables


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut MINUS et Différence entre deux tables
    Bonjour,

    D'un côté j'ai une table, de l'autre une view, j'ai remplis la table avec les données de la view un jour, depuis, les données retournées par la view ont étés modifiées depuis.

    J'ai besoin d'une procédure qui me donne tous les enregistrements qui ont étés modifiés depuis, j'ai pensé qu'un simple MINUS aurait été suffisant mais lorsque je fais

    SELECT * FROM Table
    MINUS
    SELECT * FROM View

    je n'ai rien comme résultat

    Est-ce qu'un MINUS se base sur l'enregistrement entier ou juste sur les primary key ?

    Si quelqu'un aurait une idée ?

    Merci

  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
    Points : 4 926
    Points
    4 926
    Par défaut
    tu as quoi comme résultat?

    0 rows returned

    ou

    ORA-99999

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    0 rows selected

  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
    Points : 4 926
    Points
    4 926
    Par défaut
    oui, cela voudrait dire que toutes les données de TABLE existent dans VIEW.

    que te donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM (SELECT * FROM table ORDER BY 1,2,3) WHERE ROWNUM=1;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM (SELECT * FROM view ORDER BY 1,2,3) WHERE ROWNUM=1;
    ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    Pour cet enregistrement là il est exactement pareil, donc normal qu'il ne s'affiche pas dans ma requête avec le MINUS

    Mon problème n'est pas de tester l'existence mais de tester la différence, je veux que tous les enregistrements mis à jour depuis l'ajout dans la table soient affichés dans ma requête

  6. #6
    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
    Citation Envoyé par thegreatbato Voir le message
    Bonjour,
    Est-ce qu'un MINUS se base sur l'enregistrement entier ou juste sur les primary key ?
    Un MINUS se base sur les données que tu ramènes.
    Tu peux très bien faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 1 FROM DUAL MINUS SELECT 0 FROM DUAL
    , il n'y a aucune PK.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    Donc si je suis ton raisonnement ça voudrait dire qu'il n'y a aucun des 7800 enregistrement qui a été modifié et pourtant il y a 25 personnes qui travaillent en permanence dessus ...

  8. #8
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Tu es en quelle version d'oracle ?

    En 10 g ( et plus sans doute) tu peux utiliser sans doute le row_scn ( scn_row ?) qui indique le numéro de version de la ligne ... (avec un peu de bol ca peut marcher )

    sinon tu identife champ par champ ta table et ta vue....(oui c'est super lourd)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from TABLE T, VUE V
    where v.CHAMP1 =T.CHAMP1 AND V.CHAMP2 = T.CHAMP2  .... AND T.CHAMPN = V.CHAMPN
    Là tu auras ceux qui sont identiques dans les 2 tables .... tu les enleves à la table ou la vue et c'est bon .

  9. #9
    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
    Citation Envoyé par thegreatbato Voir le message
    Donc si je suis ton raisonnement ça voudrait dire qu'il n'y a aucun des 7800 enregistrement qui a été modifié et pourtant il y a 25 personnes qui travaillent en permanence dessus ...
    Si ta requete ne ramène rien, c'est que c'est ça.
    Pour le confirmer, tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Table 
    INTERSECT
    SELECT * FROM View
    Ca te ramène les enregistrements identiques.

    Je ne te conseille pas le code de Miloux32 pour 2 raisons
    1/ C'est super lourd
    2/ Ca ne tient pas compte des champs NULL.

  10. #10
    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
    Au fait, Attention le MINUS fait un - (au niveau patates)
    Et un DISTINCT

    Tu prends toutes les données de TABLE auxquelles tu enlèves les données identiques de VIEW

    Si j'ai bien relu, TABLE est l'image de VIEW à une certaine date.
    Quand tu parles de données modifiées, tu ne parles pas de données insérées.
    Donc si TABLE contient 2 lignes et VIEW 7000, tu n'auras au max que les 2 lignes de TABLE

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    L'intersect me renvoie toutes les lignes de la table, donc ça voudrait dire que toutes les lignes sont égales, pourtant lorsque je modifie manuellement un champ qui est affiché dans ma View (je rajoute une date de naissance ==> à la base "null") et que je reteste avec le MINUS ==> Rien du tout toujours la même chose, avec l'INTERSECT ça me renvoie toujours toutes les lignes, pourtant lorsque je lance les deux requêtes et que je vérifie visuellement par dossier (enregistrement) si il y a eu des modifications, il y en a considérablement ...


    Je suis désolé de ne pas pouvoir vous donner le code exact de mes requêtes ainsi que des données exemples, ces données sont très sensibles

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    MCM

    Le nombre d'enregistrements est identique 7858 pour être exacts, et il y a 40 champs pour chaque enregistrements

  13. #13
    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
    Tu es sur qu'il n'y a pas un pb de droits/ de synonyme, bref que tu pointes bien sur les bonnes données ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pourtant lorsque je modifie manuellement un champ qui est affiché dans ma View (je rajoute une date de naissance ==> à la base "null") et que je reteste avec le MINUS ==> Rien du tout
    Alors, avec ce cas, tu testes les 2 SELECT sur ce cas précis
    et tu donnes ce qu'ils te renvoient.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    il ne faudrait pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM view
    MINUS
    SELECT * FROM table
    plutot que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM Table
    MINUS
    SELECT * FROM View
    non????

  15. #15
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par thegreatbato Voir le message
    Donc si je suis ton raisonnement ça voudrait dire qu'il n'y a aucun des 7800 enregistrement qui a été modifié et pourtant il y a 25 personnes qui travaillent en permanence dessus ...
    oui, c'est à peu près ce que ça veut dire. Sans doute que les 25 personnes font juste semblant de travailler

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    Lorsque à la place de ma View j'effectue ma requête sur seulement 3 des 40 champs

    MINUS

    Les 3 champs de la base

    La j'ai bien des résultats (celui que j'ai modifié)

    Qu'est ce que pourrait être ce problème de droits ? Limitation d'un Minus sur une VIEW ?

    Et problème de synonyme ? Les champs sont dans le même ordre et ont le même nom


    Le Minus n'est pas limité à un nombre de champs ?


    Merci beaucoup pour vos efforts

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    farenheiit C'est bien ce que je fais, même si c'est peut être pas ce que j'ai dit

    laurentschneider Mort de rire Il y a des chances effectivement

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 114
    Points : 76
    Points
    76
    Par défaut
    STOP tout le monde

    J'ai trouvé la réponse : JE SUIS UN TROUDUC !!

    J'ai fait

    SELECT * FROM VIEW
    MINUS
    SELECT * FROM VIEW


    Suis désolé de vous avoir pris votre temps pour une stupidité pareille ...

  19. #19
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par McM Voir le message

    Je ne te conseille pas le code de Miloux32 pour 2 raisons
    1/ C'est super lourd
    2/ Ca ne tient pas compte des champs NULL.
    Je ne le conseillais d'ailleurs pas moi non plus ! C'etait pour vérifier que les données avaient bien changé. ( Faudrait être fou ou obligé pour implémenter un truc pareil !)

  20. #20
    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
    Citation Envoyé par thegreatbato Voir le message
    STOP tout le monde

    J'ai trouvé la réponse : JE SUIS UN TROUDUC !!
    Rohh... le langage !!

    Bon, c'est pas grave, un petit tag delestage et c'est bon

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

Discussions similaires

  1. Différence entre deux tables
    Par fabricedallara dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 24/05/2012, 14h31
  2. Récuperer différence entre deux tables avec JOIN
    Par Takumi dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/08/2009, 22h59
  3. Afficher la différence entre deux tables
    Par MartinezGarcia dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/02/2008, 20h25
  4. Différence entre deux tables
    Par szoubir dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 24/07/2007, 18h41
  5. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33

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