Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/03/2007, 12h56   #1
Futur Membre du Club
 
Inscription : octobre 2004
Messages : 82
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 82
Points : 18
Points : 18
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 :
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 :
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
wonderyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 15h32   #2
Futur Membre du Club
 
Inscription : octobre 2004
Messages : 82
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 82
Points : 18
Points : 18
Ca ne vous inspire pas tout ça ?!
wonderyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 15h48   #3
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 16h15   #4
Futur Membre du Club
 
Inscription : octobre 2004
Messages : 82
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 82
Points : 18
Points : 18
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
wonderyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 16h41   #5
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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 :
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 16h48   #6
Futur Membre du Club
 
Inscription : octobre 2004
Messages : 82
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 82
Points : 18
Points : 18
J regarde si ça marche et je te tiens au courant (demain max). Merci beaucoup en tout cas. yan
wonderyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 16h59   #7
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 293
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 293
Points : 2 741
Points : 2 741
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 :
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 :
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 :
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 :
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)
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 17h15   #8
Futur Membre du Club
 
Inscription : octobre 2004
Messages : 82
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 82
Points : 18
Points : 18
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
wonderyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 12h18   #9
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Citation:
Envoyé par wonderyan
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)?
Il est effectivement préférable d'utiliser JOIN, j'utilise l'alternative avec WHERE plus par (mauvaise) habitude qu'autre chose...

Tout ce que tu veux savoir sur les jointures : http://sql.developpez.com/sqlaz/jointures/
__________________
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h58.


 
 
 
 
Partenaires

Hébergement Web