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

Requêtes MySQL Discussion :

Requete avec like 'x' et jamais autre chose


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut Requete avec like 'x' et jamais autre chose
    Bonsoir,

    Je ne suis pas très clair avec mon titre, je ne trouve pas les mots juste pour expliquer mon soucis.

    Avec des phrases et un exemple ce sera beaucoup plus simple.

    Je cherche à obtenir toutes les banques qui ne proposent que des comptes livret et rien d'autre.

    Ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    numCompte codeAg numCl TypeCompte Solde
    1111	CACE	101	Cheque	993
    2222	BNP	413	Livret	12234
    231231	BNP	231	Livret	 987
    984739	CACE	456	Livret 	897690
    43211	BNP	456	Livret 	12345
    Ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT codeag
    FROM comptes
    WHERE typecompte LIKE  'Livret';
    Mon résultat
    Ce que je souhaite obtenir
    En gros je souhaiterais obtenir une requete de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT codeag
    FROM comptes
    WHERE typecompte LIKE 'Livret' AND typecompte NOT LIKE 'Tout les autres types de compte';
    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Une banque qui ne propose que du livret n'existe probablement pas mais bon...

    Donc tu cherches les banques :
    1) qui proposent le livret
    2) qui ne proposent que ce type de compte soit au total 1 type de compte

    Solution : compter les types de comptes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT codeag
    FROM comptes
    GROUP BY codeag
    HAVING COUNT(DISTINCT TypeCompte) = 1
    Une fois qu'on a ça on s'en sert dans ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT codeag
    FROM comptes
    WHERE TypeCompte = 'Livret' AND codeag IN (
      SELECT codeag
      FROM comptes
      GROUP BY codeag
      HAVING COUNT(DISTINCT TypeCompte) = 1
    )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Merci bien pour ta réponse.

    J'avais pensé qu'il fallait peu etre compter le nombre de type de compte différents, mais je me disais également qu'il devait exister une requete plus courte.
    Ta réponse me convient à merveille !

    C'est en forgeant qu'on devient forgeron n'est-ce pas ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Pour forger encore un peu...

    Il serait plus direct d'exprimer la chose par un NOT EXISTS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct codeag
    from comptes C1
    where not exists (select 1 
      from comptes C2 
      where C2.codeag = C1.codeag and typecompte <> 'Livret')
    Comme les sous-requêtes corrélées sont très lentes sous MySQL, il peut être avantageux de transposer le NOT EXISTS en jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct C1.codeag
    from comptes C1
      left join comptes C2 on C1.codeag = C2.codeag and C1.typecompte <> C2.typecompte
    where C1.typecompte = 'Livret'
      and C2.codeag is null
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. requete avec like
    Par yasmine* dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/04/2007, 22h07
  2. [MySQL] requete avec LIKE
    Par hamham dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/01/2007, 15h22
  3. Requete avec LIKE et IN
    Par eowene dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/01/2007, 09h09
  4. Requete avec LIKE
    Par Eome dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 21h37
  5. oracle 8.1.7, CLOB et requete avec like
    Par fsapet dans le forum Oracle
    Réponses: 5
    Dernier message: 15/02/2005, 11h45

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