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 :

Requete SQL de recherche de correspondance: Comment faire??


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Requete SQL de recherche de correspondance: Comment faire??
    Bonjour à tous

    Je sèche toute cette apres midi sur le pb suivant:
    j'ai deux tables

    Table 1:
    Nom - objet
    A - 1
    A - 2
    A - 3
    B - 2
    B- 3
    F - 1
    G - 2
    J - 4

    Table 2 du mêm etype avec par exemple:
    C - 1
    C - 2
    C - 3
    D - 1
    D - 2
    E - 2
    E - 3
    H - 1
    I - 2
    etc...

    En fait je cherche à trouver dans la table 2 les NOMS qui ont rigoureusement le mêmes objets
    Ainsi , en retour
    on doit avoir avec cet exemple en résultat:
    A - C
    B - E
    F - H
    G - I

    Il doit y avoir rigoureusement équivalence entre les objet

    Eh Bien ! impossible - je n'y arrive par aucun moyen et pourtant cela doit être le B A BA

    Si quelqu'un sait m'aider - Merci

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Bonsoir,

    si tes deux tables sont rigoureusement identiques à ton exemple, je comprends pourquoi tu n'arrives pas à retrouver ta correspondance.
    Les noms spnt différents, les objets semblent communs à plusieurs noms..

    Il n'y a aucun lien explicite entre ces deux tables.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Précisions
    EN fait les tables sont identiques - elles proviennent d'une table d'origine
    on pourrait aussi imaginer que toutes les données sont dans la même table.
    je veux chercher par exemple tous les gateaux A, B, ... qui utilisent rigoureusement les mêms ingrédients...

    Et là je cale.

    CEs précisions suffisent -elles?

    Merci de vos conseils et recherche ...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Help!... Je sèche toujours
    Le problème semble simple..

    et je cale -

    qui à une idée??

    Merci à tous...

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    C'est un cas particulier de division relationnelle.

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/divrelationnelle/

    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/ * * * * *

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Merci pour la réponse;.... Mais encore...
    Merci pour ce tutoriel qui m'a beaucoup éclairé sur la division algébrique - mais j'ai du mal à la mettre en oeuvre car dans mon sujet,
    je n'ai qu'une seule table - Disons une liste de plats + ingrédients

    table recette:
    plat - ingrédient

    je veux trouver les plats qui ont les mêmes ingrédients exactement entre eux. Mais il ya un piège, le nombre d'ingrédients n'est pas toujours le même.

    Ainsi , il ne faut pas mettre en relation un plat avec 2 ingrédients avec un plat qui en a 3 ( dont les 2 précédents identiques)

    C'est vrai que c'est un pb épineux!

    Je continue ma réflexion - merci de votre aide à tous présente et à venir

  7. #7
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    j'ai fait une requete qui peut peut être t'aider,

    le pb c'est qu'elle affiche
    A D
    B C
    D A
    C B

    mais bon ça peut quand meme t'aider un peu peut être

    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 tab.objet, tab1.objet
     
    FROM 
     
    (SELECT Count(Table1.objet) AS CompteDeobjet, Table1.objet, Sum(Table1.val) AS SommeDeval
    FROM Table3
    GROUP BY Table1.objet) tab  
     
    INNER JOIN 
     
    (SELECT Count(Table1.objet) AS CompteDeobjet, Table1.objet, Sum(Table1.val) AS SommeDeval
    FROM Table1
    GROUP BY Table1.objet) tab1 
     
    ON (tab.SommeDeval = tab1.SommeDeval) AND (tab.CompteDeobjet = tab1.CompteDeobjet)
     
    WHERE (((tab.objet)<>[tab1].[objet]));
    par contre j'ai fait comme ci tout était dans la meme table

  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 772
    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 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    C'est le cas de la division relationnelle incomplète de la table sur elle même.

    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
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Désolé je n'y arrive pas...
    Désolé je n'y arrive pas...

    cela dépasse ma capacité d'analyse et de conception

  10. #10
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Ceci devrait fonctionner (testé sous PostgreSQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select tb.nom1, tb.nom2 from (
     
      select t1.nom as nom1, t2.nom as nom2, count(*) as nb
      from t1 join t2 on (t1.objet = t2.objet) group by t1.nom, t2.nom
     
    intersect
     
      select tx.nom as nom1, ty.nom as nom2, tx.nb from (select t1.nom, count(*) as nb from t1 group by t1.nom) as tx
      join (select t2.nom, count(*) as nb from t2 group by t2.nom) as ty on (tx.nb = ty.nb)
     
    ) as tb
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  11. #11
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select Nom1, Nom2 
    from (select a.nom nom1, b.nom nom2, count(*) as nombre1
          from rhialto_1 a inner join rhialto_2 b on a.id=b.id and a.nom!=b.nom
          group by a.nom, b.nom) inner join
         (select nom nom3, count(*) nombre3
          from rhialto_1 
          group by nom) on nom1 = nom3 and nombre1 = nombre3   inner join
         (select nom nom4, count(*) nombre4
          from rhialto_2 
          group by nom) on nom2 = nom4 and nombre1 = nombre4
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Merci à tous - J'espère que ces lignes de codes serviront à
    Bravo pour la patience et votre perspicacité - je vais de ce pas faire l'adaptation des requetes et vous tiens au courant

    cela n'empêche pas de poursuivre l'optimisation et la recherche de nouvelles solutions innovantes

    rhialto

    ( héro d'un ouvrage de Jack Vance)

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

Discussions similaires

  1. requete sql champ recherche
    Par gilbertbicot dans le forum MySQL
    Réponses: 0
    Dernier message: 29/01/2009, 12h43
  2. requete sql de recherche sur base access
    Par donhatem dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/07/2008, 23h05
  3. Requete SQL de recherche dans toute la base
    Par john.fender dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/09/2007, 15h37
  4. Résultats de recherche Google détaillés : Comment faire ?
    Par Mr N. dans le forum Référencement
    Réponses: 6
    Dernier message: 14/11/2006, 15h11
  5. problème de requete SQL et recherche
    Par franfr57 dans le forum ASP
    Réponses: 1
    Dernier message: 16/03/2006, 13h33

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