PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 22:10:27

okay ^^ je ne le fais pas alors. Encore merci beaucoup pour votre aide.

#2 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 15:04:49

J'ai laissé le NOT et changé   
AND fiche_enfant.nom <> fiche_parent.nom)   en
AND fiche_enfant.nom = fiche_parent.nom)
ce qui donne :

SELECT fiche_enfant.id_user,
       fiche_enfant.nom
FROM fiche AS fiche_enfant
WHERE NOT EXISTS -- Il n'a pas de parent avec un nom différent
  (SELECT 1 FROM parents JOIN fiche AS fiche_parent ON (parents.id_papamaman=fiche_parent.id_user)
   WHERE fiche_enfant.id_user=parents.id_u
   AND fiche_enfant.nom = fiche_parent.nom)
AND EXISTS -- Il a quand même un parent
  (SELECT 1 FROM parents
   WHERE fiche_enfant.id_user=parents.id_u
  )

C'est ce que je voulais pouvoir faire dans ma demande du message précédent.
Merci beaucoup ! big_smile big_smile !!

(Il n'y a rien pour dire que le sujet est résolu ? )

#3 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 14:58:13

c'est exactement ça smile j'ai les personnes qui ont le même nom de famille que leur deux parents. big_smile big_smile MERCI
par contre si j'enlève le "not"  de WHERE NOT EXISTS -- Il n'a pas de parent avec un nom différent
je n'obtiens pas la sélection
"les personnes qui ont un nom de famille différent de chacun de leur parent"
Si la personne a un parent avec le même nom de famille et un parent qui n'a pas le même, cela passera.
Pourquoi en enlevant seulement le not je n'obtiens pas l'inverse de la requête ?
c'est parce que la requête devient " il a au moins un parent avec un nom différent" et que la partie "ET le nom ne doit pas être égal au nom de famille d'un parent" n'est pas inclus ?

#4 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 13:39:19

SQL pro, je ne comprends pas à quoi sert T_RELATION_RLT, pourquoi veut-on avoir une date?
Dans T_LIEN_PARENTE_LPT vous avez créé un champ LPT_LIBELLE je suppose que c'est pour entrer des chaines de caractères tel que "père", "mère, "enfant"... mais où dit-on "père de quelqu'un" identifié par le PRS_ID.
Pourquoi il y a deux "lié à" ?
Est ce que le diagramme permet d'avoir des homonymes ? Je n'ai vraiment pas compris grand chose du diagramme hmm

#5 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 13:22:13

Marc Cousin, la première requête renvoie la même chose, même si le AND NOT EXISTS est à l'extérieur. Et donc affiche les personnes qui n'ont pas de parents, mais les personnes qui ont seulement des parents avec le même nom de famille sont rejetées par la requête.
La deuxième requête donne un résultat.

SQLpro, je vais le regarder plus sérieusement alors.

#6 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 13:06:37

avec l'ancien code, plus la nouvelle ligne, soit :

SELECT id_user,
       nom,prenom
FROM fiche AS fiche_enfant
WHERE NOT EXISTS
    (SELECT 1
     FROM parents
     JOIN fiche AS fiche_parent ON (parents.id_parents=fiche_parent.id_user)
     WHERE fiche_enfant.id_user=parents.id_u
       AND fiche_enfant.nom=fiche_parent.nom
       AND NOT EXISTS 
		(SELECT 1 
		FROM parents 
		WHERE id_papamaman IS NULL 
		AND parents.id_u = fiche_enfant.id_user));

j'obtiens la même solution que si je ne l'avais pas ajouté.
Et si j'utilise la version optimisée, il y a un problème au niveau du "ON"
à cette ligne

FROM fiche AS fiche_parent ON (parents.id_parents=fiche_parent.id_user)

je n'ai donc pas pu tester le code.

j'ai une petite question sur la variable "parents.id_parents" pourquoi elle n'est pas rejetée par la requête sachant que id_parents ne fait pas parti de ma table.

#7 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 12:38:28

ça me renvoie la liste des parents (même s'ils sont parents plusieurs, ils sont cités une fois) qu'ils aient le même nom de famille ou non que leur enfant
mais moi je cherche à avoir le nom des enfants qui n'ont pas le même nom de famille que leur parents, je pense que je le répète inutilement, vous l'avez compris smile

#8 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 12:21:35

ça me renvoie la liste des personnes qui n'ont pas de parents.
Je continue de faire des tests de requêtes.

ça veut dire quoi "select 1 " ?

Il n'y a aucun test dans la requête sur le nom comment vous faites pour comparer leur nom de famille ?

#9 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 11:42:03

oui c'est ça. Je suis désolée je pensais m'en sortir juste en ayant la bonne jointure et trouver le where approprié seule mais apparemment pas. C'est pour cela que je n'ai pas tout dit.

#10 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 11:19:42

Et sinon la proposition de Marc Cousin, ne me convient pas parce que:

WHERE fiche_parent.nom <> fiche_enfant.nom

me renvoie en plus les personnes qui ont un parent du même nom de famille
comme par exemple si le père a le même nom que la personne X
et si la mère n'a pas le même nom que la personne X.
Le where donné est validé.
alors que je veux que celui où tous les noms sont différents.
et si j'ajoute
AND fiche_parent.nom = fiche_enfant.nom
forcément la sélection est vide...

#11 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 11:08:14

Je n'ai pas encore bien regardé le diagramme proposé, mais mon but c'est qu'il soit possible d'avoir un nom de famille différent. Comme par exemple avoir des parents qui ne soient pas mariés et l'enfant a seulement le nom du père. D'après le petit texte joint avec ce diagramme, ce n'est pas possible.

#12 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 10:57:47

Merci beaucoup, je vais étudier ça. Je ne savais pas qu'on pouvait faire plusieurs JOIN dans une même requête.

#13 Re : Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 10:34:22

En fait, c'est quelque chose qui m'est imposé de déterminer le nom du (ou des) parent(s) et enfant, pour voir s'ils ont le même.
Comparer id_u et id_papamaman par leur nom puisque ceux sont des id_user (clés étrangères)
Rajouter un champ id_pere et un champ id_mere dans la table fiche, va seulement me permettre d'avoir une table en moins(non?), pourquoi pas, mais je ne vois toujours pas comment avec cette table je peux identifier le nom du père à partir id_pere et le nom du fils à partir d' id_u puisque j'ai seulement leur numéro.
En français la requête serait :
Selectionner le nom,prenom des "id_user"
Où leur nom est égal au nom d' "id_pere" ET nom d'id_mere
J'espère que ma réponse éclaircie la situation.

Je rajoute un petit exemple
                 FICHE
  __________________________
|id_user  |    nom       | prenom  |
|_______|__________|________|
|     1      |   DUPONT  |   martin  |
|_______|__________|________|
|     2      |   DUPONT  |   julie     |
|_______|__________|________|
|     3      |   DUPONT  |   henry  |
|_______|__________|________|
|     4      |       X        |  nicolas  |
|_______|__________|________|
|     5      |   DUPONT  |  Sylvie   |
|_______|__________|________|

                 PARENTS
  ___________________________________
|id_parents  |    id_u       | id_papamaman  |
|__________|__________|______________|
|     1           |       1        |           2           |          Martin DUPONT a pour parent  Julie DUPONT
|__________|__________|______________|
|     2           |       1        |           4           |          Martin DUPONT a pour parent Nicolas X
|__________|__________|______________|
|     3           |       3        |           1           |          Henry DUPONT a pour parent Matin DUPONT
|__________|__________|______________|
|     4           |       3        |           5           |          Henry DUPONT a pour parent Sylvie DUPONT
|__________|__________|______________|

Donc j'aimerai que ma requête me sélectionne Henry DUPONT puisque ses deux parents ont le même nom que lui

#14 Général » Quelle requête pour ce que j'aimerai faire ? » 23/03/2011 09:29:27

kiara77
Réponses : 28

Bonjour tout le monde,

je n'arrive pas à créer la requête que j'aimerai, alors j'en viens à me demander si c'est possible avec la façon dont j'ai créé mes tables.
J'ai deux tables :

create table fiche(
id_user int NOT NULL,
nom varchar(30),
prenom varchar(30),
constraint fiche_pkey primary key (id_user));

create table parents(
id_parents int NOT NULL UNIQUE,
id_u int,
id_papamaman int,
constraint parents_pkey primary key (id_u,id_papamaman),
FOREIGN KEY (id_u)
REFERENCES fiche(id_user),
FOREIGN KEY (id_papamaman)
REFERENCES fiche(id_user)

En fait il y a plusieurs fiches et je crée des liens entre eux grâce à parents. Donc dans parents, id_u, va correspondre à une personne et id_papamaman à un de ses parents.
Est ce qu'il est possible de comparer le nom d'id_u et le nom d'id_papamaman?
L'une des requêtes que j'ai tapé qui pour moi ressemble le plus à ce que j'aimerai, mais qui ne me donne pas ce que j'attendais est :

SELECT *
FROM fiche
NATURAL JOIN parents
where nom =(select nom
		from fiche
		where id_user=id_papamaman);

Merci d'avance pour votre aide, j'ai l'impression que c'est très simple en plus hmm

#15 Re : Site PostgreSQL.fr » Captcha illisible » 23/03/2011 09:07:16

Bonjour,
J'ai eu le même problème, j'ai dû recommencer au moins 4 fois.

Pied de page des forums

Propulsé par FluxBB