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

Langage SQL Discussion :

Comportement de la fonction MINUS


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut Comportement de la fonction MINUS
    Bonjour,

    J'essaye d'identifier certains enregistrements avec la fonction SQL MINUS, mais selon les données que je compare je n'ai pas le même nombre de lignes retournées.

    Je précise, voici le code :
    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
    16
    17
    18
     
    --select gpa.adv_id
    select *
    from groupe_adv gpa
    	 ,(select * from groupe_element where groupe = 'TREQ129') gpe
    where gpa.element = gpe.id
    and gpa.date_debut = (select MAX(gpad.date_debut) from groupe_adv gpad, groupe_element gpel 
                          where gpad.adv_id = gpa.adv_id and gpel.groupe = gpe.groupe and gpel.id = gpad.element)
     
    minus
     
    --select gpa.adv_id
    select *
    from groupe_adv gpa
    	 ,(select * from groupe_element where groupe = 'TREQ129') gpe
    where gpa.element = gpe.id
    and (gpa.id, gpa.date_debut) = (select MAX(gpad.id), MAX(gpad.date_debut) from groupe_adv gpad, groupe_element gpel 
                                    where gpad.adv_id = gpa.adv_id and gpel.groupe = gpe.groupe and gpel.id = gpad.element)
    Lorsque j'utilise select *, je récupère 470 lignes, mais si j'utilise select gpa.adv_id, je n'en ai plus que 390

    Donc si quelqu'un pouvait m'expliquer ce comportement cela m'aiderai beaucoup, parce que là, je ne sais pas quoi penser des mes résultats...

    Merci d'avance

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    2 possibilités :
    parce que rajouter des colonnes fait qu'une ligne de l'ensemble 2 n'appartient plus à l'ensemble 1
    ou parce que MINUS fait un DISTINCT

    Exemple :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    SQL> with t1 as (select 1 as id, 'a' as c from dual
    union all select 2, 'b' from dual
    union all select 1, 'e' from dual),
    t2 as (select 1 as id, 'c' as c from dual
    union all select 3, 'd' from dual)
    select id,c from t1
    minus
    select id,c from t2
    /
     
            ID C
    ---------- -
             1 a
             1 e
             2 b
     
    SQL> with t1 as (select 1 as id, 'a' as c from dual
    union all select 2, 'b' from dual
    union all select 1, 'e' from dual),
    t2 as (select 1 as id, 'c' as c from dual
    union all select 3, 'd' from dual)
    select id from t1
    minus
    select id from t2
    /
     
            ID
    ----------
             2
     
    SQL> with t1 as (select 1 as id, 'a' as c from dual
    union all select 2, 'b' from dual
    union all select 1, 'e' from dual),
    t2 as (select 2 as id, 'c' as c from dual
    union all select 3, 'd' from dual)
    select id from t1
    minus
    select id from t2
    /
     
            ID
    ----------
             1

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 139
    Par défaut
    Essaye de remplacer "MINUS" PAR : NOT IN

  4. #4
    Membre chevronné Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Par défaut
    MINUS (qui n'est pas un standard sql -- helas --) realise une difference entre deux ensembles.

    avec un select * il doit comparer tous les champs de ta ligne et retire les double parfait.
    avec un select moid c'est plus simple car la ce n'est que l'id qui est verifié et le resultat doit etre different.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par rberthou Voir le message
    MINUS (qui n'est pas un standard sql -- helas --)
    Utilisons les bons mots...
    MINUS est un opérateur du langage SQL normalisé... mais il n'est pas pris en charge par certains SGBD
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    EXCEPT est l'opérateur normalisé, MINUS est spécifique à Oracle et ceux qui ont suivi.

Discussions similaires

  1. comportement de la fonction mailto
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/01/2010, 08h19
  2. comportement de ma fonction
    Par Setsuna_00 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/07/2009, 12h26
  3. comportement de la fonction strtok()
    Par Arronax dans le forum C++
    Réponses: 3
    Dernier message: 15/04/2008, 15h03
  4. equivalent de la fonction minus d'oracle
    Par sapic dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2006, 13h34
  5. [Access] equivalent de la fonction minus d'oracle
    Par sapic dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/09/2006, 12h12

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