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

  1. #1
    Nouveau membre du Club
    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
    Points : 35
    Points
    35
    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 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    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 régulier

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

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Points : 690
    Points
    690
    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.
    - Informaticien passionné
    - ( java, c++, cobol, php, asp, ... )
    - http://www.berthou.com/fr/

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 776
    Points
    30 776
    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
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Points : 690
    Points
    690
    Par défaut
    Citation Envoyé par Waldar Voir le message
    EXCEPT est l'opérateur normalisé, MINUS est spécifique à Oracle et ceux qui ont suivi.
    Je le crois aussi, mais minus deveint de plus en plus "standard" même DB2 el supporte (avec sa dernière version).
    - Informaticien passionné
    - ( java, c++, cobol, php, asp, ... )
    - http://www.berthou.com/fr/

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 755
    Points : 52 521
    Points
    52 521
    Billets dans le blog
    5
    Par défaut
    Je confirme. MINUS n'existe pas dans la norme SQL. C'est bien de EXCEPT qu'il faut parler !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 776
    Points
    30 776
    Par défaut
    En effet, je me suis emmêlé entre MINUS et EXCEPT
    Il n'empèche que certains SGBD ne prennent pas en charge cette opération ensembliste de différence...
    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.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 755
    Points : 52 521
    Points
    52 521
    Billets dans le blog
    5
    Par défaut
    Non, car il est possible de la composer à partir de jointures. Il ne faut pas oublier que 5 seulement des 8 opérateurs de l'algèbre relationnelle sont suffisant pour assurer la totalité des opérations. Ainsi, différence et intersection peuvent être réalisées par des jointures.
    Et n'oubliez pas non plus qu'à ce jour il n'existe toujours pas d'opérateur de division relationnelle. C'est normal, vu que l'on peut faire une division exacte ou avec reste...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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