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

SQL Oracle Discussion :

besoin d'aide sql


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut besoin d'aide sql
    bonjour ,
    j'ai deux tables T1(chef,plat) et T2(resto,plat)
    on appelle un resto poly (r) par rapport un chef c s'il existe au moins un plat p
    telque le chef c cuisine et r est le seul restaurant qui propose le plat p .

    je voudrais afficher les uplets (chef c,resto r) telque a cuisinant au moins un plat et restaurant r est poly par rapport à c

    Merci pour l'aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Qu'avez-vous commencé à écrire ?

  3. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    J'ai franchement du mal à comprendre ce que vous voulez.

    Je crois que vous devez:
    - cherchez les couples {resto, plat} pour lesquels il n'y a qu'un plat dans T2
    - faire une jointure de l'ensemble précédent avec T1 en utilisant la colonne plat.

  4. #4
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par Oishiiii Voir le message
    J'ai franchement du mal à comprendre ce que vous voulez.
    Moi aussi...
    Si tu nous mettais un exemple de tes tables (juste quelques lignes) et un autre exemple nous montrant ce que tu veux obtenir se serait plus facile de t'aider.

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    je devrais etre plus clair
    par exemple on a dans T1 :
    c1---p1
    c1---p2
    c1---p3
    c2---p2
    c2---p4
    c3---p5
    c4---p6
    T2
    r1---p1
    r1---p2
    r2---p2
    r2---p3
    r2---p4
    r3---p2
    r3---p5
    r3---p6
    et normalment j'obtiendrais
    c1---r1
    c4---r3

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Et pourquoi pas (c1, r2), (c2, r2) et (c3, r3) ?

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    oui je l'ai oublié

  8. #8
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    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
     
    with T1 as ( select 'c1'chef, 'p1' plat from dual union all 
                 select 'c1','p2' from dual union all 
                 select 'c1','p3' from dual union all 
                 select 'c2','p2' from dual union all 
                 select 'c2','p4' from dual union all 
                 select 'c3','p5' from dual union all 
                 select 'c4','p6' from dual ) 
    , T2 as ( select 'r1' resto,'p1'  plat from dual union all
              select 'r1' ,'p2'from dual union all
              select 'r2','p2' from dual union all
              select 'r2','p3' from dual union all
              select 'r2','p4' from dual union all
              select 'r3','p2' from dual union all
              select 'r3','p5' from dual union all
              select 'r3','p6' from dual )
    SELECT resto,chef
      FROM (SELECT resto, chef, COUNT (1) OVER (PARTITION BY t2.plat)
                                                                    nb_plat_resto
              FROM t1, t2
             WHERE t1.plat = t2.plat)
     WHERE nb_plat_resto = 1
     
    RESTO           CHEF           
    --------------- ---------------
    r1              c1             
    r2              c1             
    r2              c2             
    r3              c3             
    r3              c4             
     
     
    5 rows selected.

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    je vous remercie pour l'aide. Est ce que vous pouvez me dire c'est quoi
    COUNT (1) OVER (PARTITION BY )
    je ne sais pas comment traduire ceci en algèbre relationnelle !

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    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
    WITH T1 AS ( SELECT 'c1'chef, 'p1' plat FROM dual union ALL 
                 SELECT 'c1','p2' FROM dual union ALL 
                 SELECT 'c1','p3' FROM dual union ALL 
                 SELECT 'c2','p3' FROM dual union ALL 
                 SELECT 'c3','p4' FROM dual
    ) 
    , T2 AS ( SELECT 'r1' resto,'p2'  plat FROM dual union ALL
              SELECT 'r1' ,'p3'FROM dual union ALL
              SELECT 'r1','p5' FROM dual union ALL
              SELECT 'r1','p1' FROM dual union ALL
              SELECT 'r2','p2' FROM dual union ALL
              SELECT 'r3','p4' FROM dual union ALL
              SELECT 'r3','p1' FROM dual )
     
    SELECT *
      FROM (SELECT resto, chef , COUNT (1) OVER (PARTITION BY t2.plat)
                                                                    nb_plat_resto
              FROM t1, t2
             WHERE t1.plat = t2.plat)
     where nb_plat_resto = 1
    j'ai essayé la requête sur cet ensemble mais
    ça devrait retourner
    c1-r1
    c2-r1
    c3-r3
    mais ça ne me retourne que c3-r3

    merci pour l'aide

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Essayez celle-ci :
    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
    WITH T1 AS
    (
    SELECT 'c1' as chef, 'p1' as plat FROM dual union ALL 
    SELECT 'c1'        , 'p2'         FROM dual union ALL 
    SELECT 'c1'        , 'p3'         FROM dual union ALL 
    SELECT 'c2'        , 'p3'         FROM dual union ALL 
    SELECT 'c3'        , 'p4'         FROM dual
    ) 
      ,  T2 AS
    (
    SELECT 'r1' as resto, 'p2' as plat FROM dual union ALL
    SELECT 'r1'         , 'p3'         FROM dual union ALL
    SELECT 'r1'         , 'p5'         FROM dual union ALL
    SELECT 'r1'         , 'p1'         FROM dual union ALL
    SELECT 'r2'         , 'p2'         FROM dual union ALL
    SELECT 'r3'         , 'p4'         FROM dual union ALL
    SELECT 'r3'         , 'p1'         FROM dual
    )
      ,  SR AS
    (
      SELECT plat
        FROM t2
    GROUP BY plat          
      HAVING count(distinct resto) = 1          
    )         
    SELECT DISTINCT chef, resto
      FROM SR
           inner join t1
             on t1.plat = SR.plat
           inner join t2
             on t2.plat = SR.plat;

  12. #12
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Or
    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
     
    WITH T1 AS ( SELECT 'c1'chef, 'p1' plat FROM dual union ALL 
                 SELECT 'c1','p2' FROM dual union ALL 
                 SELECT 'c1','p3' FROM dual union ALL 
                 SELECT 'c2','p3' FROM dual union ALL 
                 SELECT 'c3','p4' FROM dual
    ) 
    , T2 AS ( SELECT 'r1' resto,'p2'  plat FROM dual union ALL
              SELECT 'r1' ,'p3'FROM dual union ALL
              SELECT 'r1','p5' FROM dual union ALL
              SELECT 'r1','p1' FROM dual union ALL
              SELECT 'r2','p2' FROM dual union ALL
              SELECT 'r3','p4' FROM dual union ALL
              SELECT 'r3','p1' FROM dual )
     
    SELECT chef, resto
      FROM (SELECT resto, chef , COUNT (distinct t2.resto) OVER (PARTITION BY t2.plat)
                                                                    nb_plat_resto
              FROM t1, t2
             WHERE t1.plat = t2.plat)
     WHERE nb_plat_resto = 1
     
     
    CH RE
    -- --
    c2 r1
    c1 r1
    c3 r3
     
     
    3 rows selected.

  13. #13
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    Merci pour votre aide .J'ai juste une question par rapport
    COUNT (DISTINCT t2.resto) OVER (PARTITION BY t2.plat)


    Merci

  14. #14
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    C'est les fonctions analytiques, tu trouveras ci-dessous un article qui parle sur les fonctions analytiques:

    http://lalystar.developpez.com/fonctionsAnalytiques/

    Cordialement Salim.

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

Discussions similaires

  1. besoin d'aide sql
    Par carolina88 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/11/2012, 09h19
  2. Besoin d'aide SQL
    Par Fiscardo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/07/2008, 21h48
  3. j'ai besoin d'aide [SQL SERVR]
    Par am.adnane dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/01/2006, 14h24
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59

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