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 :

Probème sur la mise au point d'une requête


Sujet :

Langage SQL

  1. #1
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut Probème sur la mise au point d'une requête
    Bonjour,

    Je n'ai pas véritablement l'habitude de poser des questions, mais étant donné que je me suis auto-bloqué, ça ne me déplairait pas d'obtenir de l'aide.

    Un petit tour sur le besoin : j'ai 2 tables T1(id, str) et T2(regex). La regex dans T2 est une expression qui est valide pour l'opérateur SQL LIKE ou NOT LIKE. Mon but est maintenant de matcher les lignes de T1 tel que l'on ait str NOT LIKE toutes les lignes de T2.

    Un exemple:
    T1
    1, x.google.fr/q=toto
    2, x.google.ca/q=toto
    3, x.developpez.com/forum/...
    4, x.developpez.com/forum/...
    5, images.google.com/imgres=...

    T2
    x.google.fr/%
    x.google.ca/%
    images.google.com/%

    Le but: obtenir en une seule requête les lignes 3 et 4 de T1, et uniquement celles-ci, sans doublons (de manière à ce que je puisse faire un COUNT(id) et un GROUP BY str ensuite, histoire de regrouper les lignes similaires et de compter le nombre d'occurrences de telle ou telle valeur de str).

    Est-ce que vous auriez une idée sur la manière de procéder ?

    Merci d'avance !

  2. #2
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut
    Sans grande conviction,étant assez nul en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT str 
    FROM T1
    WHERE str NOT LIKE(SELECT * FROM T2)

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par ToutPaumé Voir le message
    Sans grande conviction,étant assez nul en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT str 
    FROM T1
    WHERE str NOT LIKE(SELECT * FROM T2)
    Merci, mais ça va générer une erreur (le SELECT * FROM T2) va retourner plusieurs lignes, donc le NOT LIKE ne pourra pas s'exécuter.

    A titre indicatif, j'ai essayé

    SELECT str FROM T1, T2
    WHERE T1.str NOT LIKE T2.regex

    Cela me crée N duplications de chaque lignes (ce qui était attendu). J'aurais aimé pouvoir écrire NOT LIKE ANY T2.regex, mais bon, si tout était aussi simple, ça se saurait...

    ___________________________________________________
    Update: et voilà que je trouve une solution - reste à déterminer si je peux faire mieux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT str, COUNT(id) AS count
    FROM T1
    WHERE 
      str NOT IN 
        (SELECT regex
         FROM T1, T2
         WHERE 
           str LIKE regex)
    GROUP BY str
    (Bien évidemment, la seconde requète est due au fait que j'ai plusieurs autres colonnes dans T2).

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT str 
    FROM T1
    WHERE NOT EXISTS ( SELECT 'X' FROM T2 WHERE T1.STR LIKE T2.STR)

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Lux08 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT str 
    FROM T1
    WHERE NOT EXISTS ( SELECT 'X' FROM T2 WHERE T1.STR LIKE T2.STR)
    C'est effectivement beaucoup plus rapide !

    Merci à tous pour votre aide !

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

Discussions similaires

  1. Mise au point d'une macro
    Par lenul78570 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/12/2009, 15h05
  2. Réponses: 8
    Dernier message: 19/09/2008, 19h13
  3. question sur la mise en place d'une architecture glpi oracle
    Par sousoujda2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/08/2008, 16h07
  4. conseil sur la mise en place d une solution BI
    Par pass38 dans le forum Approche théorique du décisionnel
    Réponses: 7
    Dernier message: 23/06/2008, 18h32
  5. [Debutant] Mise au point d'une temporisation
    Par Slivo dans le forum Débuter
    Réponses: 5
    Dernier message: 25/04/2007, 00h18

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