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 :

Jointure externe sur 2 tables


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut Jointure externe sur 2 tables
    Bonjour,

    je souhaite obtenir:

    Produit1 Genre1 12
    Produit1 Genre2 5
    Produit1 Genre3 <null>
    Produit2 Genre1 20
    Produit2 Genre2 <null>
    Produit2 Genre3 8
    etc..

    Tous les produits et les genres sont affichés meme s'ils ont une correspondance null pour un produit et un genre donné.

    Voivi ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID
    from PRODUIT p, GENRE g
    left outer join APPEL ap on ap.PROD_ID=p.PROD_ID and ap.GENR_iD=g.GENR_ID
    apparement c'est faux
    j'ai une erreur:
    ISC ERROR MESSAGE:
    no current record for fetch operation

    Voici une autre requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID
    from PRODUIT p
    left outer join APPEL ap on p.PROD_ID=ap.PROD_ID
    right outer join GENRE g on ap.GENR_iD=g.GENR_ID
    et là ca fait pas ce que je veux

    Une petit idée sur la bonne requête à effectuer?

  2. #2
    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
    Par défaut
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID 
    from PRODUIT p CROSS JOIN GENRE g 
    left outer join APPEL ap on ap.PROD_ID=p.PROD_ID and ap.GENR_iD=g.GENR_ID

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Citation Envoyé par Médiat
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID 
    from PRODUIT p CROSS JOIN GENRE g 
    left outer join APPEL ap on ap.PROD_ID=p.PROD_ID and ap.GENR_iD=g.GENR_ID
    J'utilise IBOConsole pour vérifier mes requêtes et apparement le mot cross n'est pas reconnu

  4. #4
    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
    Par défaut
    Essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID 
    from (select prod_id, genr_id from PRODUIT,  GENRE) g 
    left outer join APPEL ap on ap.PROD_ID=g.PROD_ID and ap.GENR_iD=g.GENR_ID

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Citation Envoyé par Médiat
    Essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID 
    from (select prod_id, genr_id from PRODUIT,  GENRE) g 
    left outer join APPEL ap on ap.PROD_ID=g.PROD_ID and ap.GENR_iD=g.GENR_ID
    Non plus erreur sur le select, on ne peut pas faire ça!

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Par défaut
    Bonjour,
    Et ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID 
    from PRODUIT p CROSS JOIN GENRE g 
    left outer join APPEL ap on ap.PROD_ID=p.PROD_ID 
    join  ap.GENR_iD=g.GENR_ID
    et sur Quel QGBD ?

    Slts
    Chris

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Citation Envoyé par Maitre B
    Et ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select p.PROD_NOM, g.GENR_DESC, ap.APP_ID 
    from PRODUIT p CROSS JOIN GENRE g 
    left outer join APPEL ap on ap.PROD_ID=p.PROD_ID 
    join  ap.GENR_iD=g.GENR_ID
    et sur Quel QGBD ?
    Non plus, IBOConsole dit:
    ISC ERROR MESSAGE:
    Dynamic SQL Error
    SQL error code = -104
    Token unknown - line 4, char 9
    .

    Le "join" ne va pas!

    Mon sgbd est Interbase.

  8. #8
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Bonjour,

    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
    select pnom, 
    gdesc, 
    ap.app_id
    from 
    (
    select 	p.prod_id as pid,	
    	p.prod_nom as pnom,
    	g.genr_id as gid,
    	g.genr_desc as gdesc
    from 	produit p,
    	genre g
    ) as CrossJoin
    left outer join appel ap
    on CrossJoin.pid = ap.prod_id
    and CrossJoin.gid = ap.genr_id
    order by 1, 2, 3
    et ça ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Citation Envoyé par TheLeadingEdge
    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
    select pnom, 
    gdesc, 
    ap.app_id
    from 
    (
    select 	p.prod_id as pid,	
    	p.prod_nom as pnom,
    	g.genr_id as gid,
    	g.genr_desc as gdesc
    from 	produit p,
    	genre g
    ) as CrossJoin
    left outer join appel ap
    on CrossJoin.pid = ap.prod_id
    and CrossJoin.gid = ap.genr_id
    order by 1, 2, 3
    et ça ?
    Non les select imbriqués il en veut pas non plus

    ISC ERROR MESSAGE:
    Dynamic SQL Error
    SQL error code = -104
    Token unknown - line 6, char 1
    select

  10. #10
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Re,

    C pas 1 machine qui va faire la loi qd même!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select 	p.prod_nom,
    	g.genr_desc,
    	ap.app_id
    from 	produit p 
    join genre g on 1 = 1
    left outer join appel ap
    on p.prod_id = ap.prod_id
    and g.genr_id  = ap.genr_id
    order by 1, 2, 3
    Dis moi que ça marche !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Citation Envoyé par TheLeadingEdge
    Re,

    C pas 1 machine qui va faire la loi qd même!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select 	p.prod_nom,
    	g.genr_desc,
    	ap.app_id
    from 	produit p 
    join genre g on 1 = 1
    left outer join appel ap
    on p.prod_id = ap.prod_id
    and g.genr_id  = ap.genr_id
    order by 1, 2, 3
    Dis moi que ça marche !
    Félicitation tu t'es imposé face à la machine!
    Ben merci en tout cas! Cela correspond tout à fait ce que j'attendais!

    Sinon je veux bien quelques explications.
    "order by 1,2,3" ça revient bien au même que d'écrire "order by p.prod_nom, g.genr_desc, ap.app_id" ??
    "join genre g on 1 = 1" pourquoi ce 1=1??
    et est-ce bien la même chose que "inner join genre g on 1 = 1" ???

  12. #12
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Ouf, tu me rassures. Pour tout te dire j'étais en train de dl IB6 pour faire les tests sur ma machine.

    Citation Envoyé par Danae
    order by 1,2,3" ça revient bien au même que d'écrire "order by p.prod_nom, g.genr_desc, ap.app_id" ??
    Oui. C utile quand tu as des colonnes calculées ds ton select. (Heureusement que IB l'accepte, j'avais pas fait attention que j'avais tapé ça!).

    Citation Envoyé par Danae
    join genre g on 1 = 1" pourquoi ce 1=1??
    Comme la jointure est tjours vraie ça fait 1 produit cartésien (CrossJoin) de tes tables.

    Citation Envoyé par Danae
    et est-ce bien la même chose que "inner join genre g on 1 = 1" ???
    Dans ce cas là encore oui.

    A +

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

Discussions similaires

  1. Requete SQL jointure externe sur plusieurs tables
    Par mattmax dans le forum Développement
    Réponses: 4
    Dernier message: 28/12/2010, 10h07
  2. jointure externe sur 2 tables
    Par serna dans le forum Débuter
    Réponses: 11
    Dernier message: 11/03/2010, 09h43
  3. Jointure externe sur 3 tables
    Par Gobouz dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/12/2009, 13h48
  4. jointure externe sur 2 tables
    Par rupteur dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/03/2009, 14h03
  5. Jointures externes sur une table de jointure
    Par mart1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/10/2006, 01h33

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