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

PostgreSQL Discussion :

Sechage sur syntaxe de requete


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut Sechage sur syntaxe de requete
    Bonjour à vous,

    je sèche sur la façon de faire une requète. Je n'arrive même pas à l'expliquer formellement!...
    En fait voici schématiquement ma base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    table1 (
        id_table1,
        id_1_table2, #foreign key sur la primary key de table2
        id_2_table2, #foreign key sur la primary key de table2
    );
     
    table2 (
       id_table2,
       blabla,
    );
    et donc en fait je voudrais faire une requete ou je séléctionne les champs blabla corresondant aux "id_x_table2" de la table1.

    Vous comrpennez?

    Moi je reste bloqué à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id_1_table2 AS blabla1 #c'est blabla que je veux voir dans le select....
           id_2_table2 AS blabla2
    FROM table1, table2
    WHERE id_table2 = id_1_table1 #et là postgre me selectionne forcément 2 fois le meme id_table2...
    AND id_table2 = id_2_table2 ;
    Je vous remercie de votre patience,

    Yan

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Ca ne vous inspire pas tout ça ?!

  3. #3
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

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

    Citation Envoyé par wonderyan
    Ca ne vous inspire pas tout ça ?!
    euh, non, pas trop... Je ne vois pas pourquoi ça te renvoie deux occurrences. Et si tu mets un OR plutôt qu'un AND ? (ou alors si tu donnais un exemple ?)
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Oui pardon il faut plus comprendre que mon problème se situe au niveau du SELECT....
    Comment fais-je pour que Postgres me mette 2 champs "blabla" disctincts?
    C'est mieux là ?!

    Pour le OR, c'est pas le truc, il me faut vraiment ces deux champs de ma table1.

    Pour un exemple c'est un peu tendu (c'est de la bioinformatique...) mais je pense pas que ce soit nécessaire.

    C'est juste quand on fait une requete et que l'on veut séléctionner les valeurs "pointées" par deux champs différents d'une table sur un même champ de la table pointée comment on fait?.. (voilà je voulais essayer de pas dire une phrase aussi compliquée mais tu m'y a forcé )


    Merci!

    yan

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    De la façon dont ta clause WHERE est faite, les seuls enregistrements renvoyés seront ceux pour lesquels id_1_table2 est égal à id_2_table2 (hé oui, si id_1_table2 = id_table2 ET id_2_table2 = id_table2 ALORS id_1_table2 = id_2_table2), ce qui me paraît un peu bizarre...

    Ce serait pas plutôt ça que tu cherches à faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_table1, t1.blabla AS blabla1, t2.blabla AS blabla2 FROM table1, table2 AS t1, table2 AS t2 WHERE id_1_table2 = t1.id_table2 AND id_2_table2 = t2.id_table2
    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

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    J regarde si ça marche et je te tiens au courant (demain max). Merci beaucoup en tout cas. yan

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par wonderyan
    Oui pardon il faut plus comprendre que mon problème se situe au niveau du SELECT....
    Comment fais-je pour que Postgres me mette 2 champs "blabla" disctincts?
    C'est mieux là ?!

    Pour le OR, c'est pas le truc, il me faut vraiment ces deux champs de ma table1.

    Pour un exemple c'est un peu tendu (c'est de la bioinformatique...) mais je pense pas que ce soit nécessaire.

    C'est juste quand on fait une requete et que l'on veut séléctionner les valeurs "pointées" par deux champs différents d'une table sur un même champ de la table pointée comment on fait?.. (voilà je voulais essayer de pas dire une phrase aussi compliquée mais tu m'y a forcé )


    Merci!

    yan
    pour que ce soit clair, il n'est pas inutile de changer votre choix de noms qui ne facilite rien à la compréhension de ce que vous voulez faire :
    vous avez une table qui contient des informations "info" et qui est en relation N x M avec elle-même, et ces relations sont exprimées via une table "relation"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create table info (
        id bigserial primary key,
       title varchar(256)
    );
     
    create table relation (
        id bigserial primary key,
        rel1 bigint references info(id),
        rel2 bigint references info(id)
    );

    les query sont alors :
    pour avoir les infos selon la relation 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select rel.id, info1.title 
    from relation as rel 
    join info as info1 on rel.rel1 = info1.id ;
    (pour la relation 2, idem remplacez 1 par 2 …)

    et pour avoir les 2 en même temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select rel.id, info1.title as rel1_title, info2.title as rel2_title 
    from relation as rel 
    join info as info1 on rel.rel1 = info1.id 
    join info as info2 on rel.rel2 = info2.id ;
    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
     
    insert into info(title) values('titre 1') ;
    insert into info(title) values('titre 2') ;
    insert into info(title) values('titre 3') ;
    insert into relation(rel1, rel2) values(1,2) ;
    insert into relation(rel1, rel2) values(2,3) ;
    insert into relation(rel1, rel2) values(1,3) ;
     
    select rel.id, info1.title as rel1_title, info2.title as rel2_title from relation as rel join info as info1 on rel.rel1 = info1.id join info as info2 on rel.rel2 = info2.id ;
     
     id | rel1_title | rel2_title 
    ----+------------+------------
      1 | titre 1    | titre 2
      2 | titre 2    | titre 3
      3 | titre 1    | titre 3
    (3 rows)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Wouhahou!

    Merci les gars.
    Je viens de comprendre qu'on peut mettre des "AS" dans la partie FROM.
    JeitEmgie, je m'excuse de mon manque de formalisme, honte à moi; mais je n'ai pas la formation. Il va me falloir un peu de temps pour bien comprendre cette notion de JOIN.

    Et donc GrandFather n'utilise pas de JOIN. Or je viens de tester et ça marche pas mal; merci d'ailleurs.
    Est ce mal de ne pas utiliser de JOIN (sans T ahah)?

    Merci énormément de ces éclairements.

    Yan

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

Discussions similaires

  1. syntaxe dans requete
    Par decour dans le forum Access
    Réponses: 2
    Dernier message: 30/09/2005, 16h55
  2. question sur syntaxe d'une requete
    Par sparis dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 29/09/2005, 11h58
  3. Rapidité d'execution :RechDom sur Table ou Requete???
    Par samlepiratepaddy dans le forum Access
    Réponses: 4
    Dernier message: 21/09/2005, 16h18
  4. TABLE pointant sur elle-même, requete de selection recursive
    Par Mike@Nestor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/07/2005, 14h50
  5. erreur syntaxe dans requete
    Par dom - ien moutiers dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/04/2004, 11h54

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