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 :

Probleme jointure d'une table sur elle même


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut Probleme jointure d'une table sur elle même
    Bonjour à tous, voila j'ai un probleme de sql :

    Voila un extrait de la table sur laquelle je requete :

    ------------------------------------------
    | id | is_draft | draft_for | title |
    ------------------------------------------
    | 1 | N | 0 | titre |
    ------------------------------------------
    | 2 | O | 1 | titre 2 |
    ------------------------------------------
    etc, etc ( + de 10000)


    id est un entier
    is_draft est un enum('O','N')
    draft_for est un entier
    il ne peut y avoir qu'un enregistrement ayant is_draft='O' et draft for='1' (par exemple)

    j'aimerais selectionner tous les enregistrements avec is_draft = 'N' (jusque là ca va..) mais j'aimerais aussi savoir aussi s'il existe des enregistrements avec is_draft='O' et draft_for = id de l'enregistrement qui a is_draft='O' et id_draft=(id de l'enregistrement courant) pour avoir une sortie du genre :

    ------------------------------------------
    | id | is_draft | draft_for | id_draft |
    ------------------------------------------
    | 1 | N | 0 | 2 |
    ------------------------------------------
    | 5 | N | 0 | 0 |
    ------------------------------------------
    | 8 | N | 0 | 3 |
    ------------------------------------------

    je cherche depuis un moment et là j'avoue que je cale...

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut

    si j'ai bien compris, quand is_draft vaut N, alors draft_for vaut toujours 0
    donc tu veux pour chaque enregistrement qui a is_draft à N
    le id de la ligne qui a is_draft à O et draft_for à l'id de la ligne courante... ?

    (je répète peut-être ce que tu as dit à peut de chose près, mais c'est pour être sûr d'avoir bien compris ce que tu veux )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par Swoög
    Salut
    Salut et merci de t'interesser à mon cas !


    Citation Envoyé par Swoög
    Salut

    si j'ai bien compris, quand is_draft vaut N, alors draft_for vaut toujours 0
    Oui, exactement !

    Citation Envoyé par Swoög
    donc tu veux pour chaque enregistrement qui a is_draft à N
    le id de la ligne qui a is_draft à O et draft_for à l'id de la ligne courante... ?

    (je répète peut-être ce que tu as dit à peut de chose près, mais c'est pour être sûr d'avoir bien compris ce que tu veux )
    Oui, c'est cela excepté que dans le résultat je ne veux que ceux ayant is_draft='N'

    Merci à toi

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par fred64
    Oui, c'est cela excepté que dans le résultat je ne veux que ceux ayant is_draft='N'
    oui, bien entendu ^^

    OK, merci pour toutes ves précisions... voyons... essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.id, T2.id AS id_draft
    FROM tbl T1
    <div style="margin-left:40px">LEFT JOIN tbl T2
    <div style="margin-left:40px">ON T1.id = T2.draft_for AND T2.is_draft = 'O'</div></div>WHERE T1.si_draft = 'N'
    le "AND T2.is_draft = 'O'" est là juste au cas où, normalement T1.id = T2.draft_for suffit puisque si T2.is_draft vaut 'N', alors T2.draft_for vaudra 0

    il faut que tu remplaces tbl par le nom de ta table, ne touche pas à T1 ni T2, ce sont des aliases qui sont nécessaire puisqu'on joint la table à elle-même

    j'ai volontairement passer sous silence le is_draft et draft_for puisqu'il seront toujours à 'N' et 0

    ça te renverra les enregistrement sous la forme
    id, draft_id
    pour chaque enregistrement ayant is_draft à 'N'
    avec draft_id qui vaut NULL s'il n'y a pas d'enregistrement ayant is_draft à 'O' et le draft_for correspondant à id

    http://sql.developpez.com/sqlaz/jointures/ pour un tuto bien complet sur les jointures
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut
    Merci beaucoup à toi c'est effectivement cela qu'il me fallait,

    je faisais deja dans d'autres requetes des jointures mais des jointures d'une table sur elle même je ne connaissais pas,
    merci de t'être penché sur mon problème

    (merci pour le lien aussi, très instructif ! )

    A +


    Fred

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

Discussions similaires

  1. [Modèle Relationnel] jointure d'une table avec elle-même
    Par johnny3 dans le forum Schéma
    Réponses: 11
    Dernier message: 26/04/2015, 00h15
  2. jointure d'une table sur elle même
    Par fred! dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/06/2012, 12h30
  3. Relation d'une table sur elle-même ?
    Par TallyHo dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/10/2007, 00h14
  4. [SQL2K] delete cascade d'une table sur elle même
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2006, 16h28
  5. [arborescence] jointure d'une table avec elle même ?
    Par Celelibi dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/11/2004, 18h48

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