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 :

intersect et having


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Goldocrack
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 126
    Par défaut intersect et having
    Salut à tous et bonne année !

    Après de nombreux essais (intersect et requête inner) je vous expose mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT `champlememe` FROM `tablelameme` WHERE `condition1`=200 AND `condition2`<60 
    INTERSECT 
    SELECT `champlememe` FROM `tablelameme` GROUP BY `condition3` WHERE HAVING COUNT(`champlememe`)>1
    Je n'arrive pas à faire fonctionner cette requête (erreur) alors que les 2 fonctionnent séparément.


    En désespoir de cause j'ai essayé de passer par une autre méthode en utilisant que des termes conventionnés mais seul les résultats de la première partie de la requête ressortent en résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT `champlememe` FROM `tablelameme` GROUP BY `condition3` HAVING COUNT(`champlememe`)>1 
    AND EXISTS
    (SELECT `champlememe` FROM `tablelameme` WHERE `condition1`=200 AND `condition2`<60)
    J'ai aussi tenté de rajouté à la fin "AND `champlememe`=`champlememe` (en mettant des alias sur la première et la deuxième requête mais les résultats sont toujours ceux de la première requête.


    Merci beaucoup pour votre aide !

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    Citation Envoyé par Goldocrack Voir le message
    Après de nombreux essais (intersect et requête inner) je vous expose mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT `champlememe` FROM `tablelameme` WHERE `condition1`=200 AND `condition2`<60 
    INTERSECT 
    SELECT `champlememe` FROM `tablelameme` GROUP BY `condition3` WHERE HAVING COUNT(`champlememe`)>1
    Je n'arrive pas à faire fonctionner cette requête (erreur) alors que les 2 fonctionnent séparément.
    salut,

    quelle erreur? quel SGBD?

    de plus je suis étonné que ta 2ème requete fonctionne.
    Je l'écrirais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `champlememe` FROM `tablelameme` GROUP BY `condition3` HAVING COUNT(`champlememe`)>1

  3. #3
    Membre confirmé Avatar de Goldocrack
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 126
    Par défaut
    Salut et merci de ta réponse

    Citation Envoyé par Cybher Voir le message
    de plus je suis étonné que ta 2ème requete fonctionne.
    Je l'écrirais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `champlememe` FROM `tablelameme` GROUP BY `condition3` HAVING COUNT(`champlememe`)>1
    Effectivement, la requête ne fonctionnait pas (mais ce n'était qu'une erreur de copier coller), mais même après la correction le problème reste. Apparemment c'est la requête INTERSECT qui ne fonctionne pas (c'est pourquoi j'ai essayé la deuxième solution).

    Citation Envoyé par Cybher Voir le message
    quelle erreur? quel SGBD?
    La voici :
    "MySQL a répondu:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERSECT ( SELECT `ehpFiness` FROM `tblehpa20071030` GROUP BY `ehpFinessJuridiq' at line 1 "

    Merci de votre aide, je reste encore embêtée (je précise que je ne dois pas mettre à jour le moteur SQL --> serveur informatique entreprise)

  4. #4
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 235
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Votre SGBD
    'INTERSECT ( SELECT `ehpFiness` FROM `tblehpa20071030` GROUP BY `ehpFinessJuridiq'
    Votre SGBD a raison, la colonne ehpFiness doit faire partie du GROUP BY...

  5. #5
    Membre confirmé Avatar de Goldocrack
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 126
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Votre SGBD a raison, la colonne ehpFiness doit faire partie du GROUP BY...
    Je ne comprends pas pourquoi ma colonne ehpFiness doit faire partie du GROUP BY (ni même comment l'y intégrer)

    ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `ehpFiness` FROM `tblehpa20071030` WHERE `ehpCodeCategorie`=200 INTERSECT SELECT `ehpFiness` FROM `tblehpa20071030` GROUP BY `ehpFinessJuridique` HAVING COUNT(`ehpFiness`)>1
    Je recherche les résultats identiques sortant des deux requêtes :
    • la 1ère ayant un code de catégorie égal à 200
    • la 2nde permet de connaitre les clés primaires ehpFiness qui ont en relation au moins un autre numéro ehpFiness ayant le même numéro ehpFinessJuridique


    Merci de m'éclairer sur ce point

  6. #6
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    Citation Envoyé par Goldocrack Voir le message
    Je ne comprends pas pourquoi ma colonne ehpFiness doit faire partie du GROUP BY (ni même comment l'y intégrer)
    Toute dimension existant dans un SELECT doit forcément être répétée dans le GROUP BY, comme le dit fsmrel, c'est une règle de l'écriture du GROUP BY (le contraire n'est pas obligatoire).


    Citation Envoyé par Goldocrack Voir le message
    la 2nde permet de connaitre les clés primaires ehpFiness qui ont en relation au moins un autre numéro ehpFiness ayant le même numéro ehpFinessJuridique
    Je ne suis pas sûr de comprendre la demande car les noms de colonnes sont moyennement parlant.
    et ça ? (pour la 2é partie après l'INTERSECT) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  `ehpFiness`  
    FROM  `tblehpa20071030` 
    WHERE `ehpFinessJuridique` 
    IN  (
          SELECT `ehpFinessJuridique` 
          FROM `tblehpa20071030` 
          GROUP BY `ehpFinessJuridique` 
          HAVING COUNT(*)>1
          )

  7. #7
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 235
    Billets dans le blog
    16
    Par défaut
    Je ne comprends pas pourquoi ma colonne ehpFiness doit faire partie du GROUP BY (ni même comment l'y intégrer)
    SQL est ainsi fait, nous n'y pouvons rien et tous les SGBD utilisant SQL vous sortiront une injure du même calibre que celle à laquelle vous avez eu droit...

    Quand vous dites :

    connaitre les clés primaires ehpFiness qui ont en relation au moins un autre numéro ehpFiness ayant le même numéro ehpFinessJuridique
    Imaginez alors que la table tblehpa20071030 ait une soeur jumelle : automatiquement vous serez ammenée à effectuer une jointure entre ces deux tables, avec comme condition même ehpFinessJuridique et numéro ehpFiness distinct.

    Le Select correspondant devient le suivant (le DISTINCT n'est pas strictement nécessaire, mais avec SQL on ne sait jamais et ça ne mange pas de pain) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT  DISTINCT a.ehpFiness
    FROM   tblehpa20071030 a,
           tblehpa20071030 b
    WHERE  a.ehpFinessJuridique = b.ehpFinessJuridique
    And    a.ehpFiness <> b.ehpFiness
    Et la requête complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT   ehpFiness
    FROM     tblehpa20071030
    WHERE    ehpCodeCategorie = 200
    INTERSECT
    SELECT  DISTINCT a.ehpFiness
    FROM   tblehpa20071030 a,
           tblehpa20071030 b
    WHERE  a.ehpFinessJuridique = b.ehpFinessJuridique
    And    a.ehpFiness <> b.ehpFiness
    En plus, pendant que je réponds, phili_b vous propose une alternative :
    Abondance de biens ne nuit pas... Et n'hésitez pas à décortiquer tout cela.

  8. #8
    Membre confirmé Avatar de Goldocrack
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 126
    Par défaut
    Bonsoir,

    Je vous remercie de votre aide concernant la résolution du problème ci-dessus


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

Discussions similaires

  1. Intersection entre 2 triangles?? (3D)
    Par supergrey dans le forum DirectX
    Réponses: 1
    Dernier message: 25/08/2004, 10h22
  2. EXCEPT et INTERSECT sous MS SQLServer ?
    Par christie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/05/2004, 17h47
  3. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 09h03
  4. [prg jeux ]Définir l'intersection de deux rectangles
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 30/07/2003, 19h11
  5. XPath: intersection de chemins
    Par aldo047 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/03/2003, 11h30

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