[mysql] NOT EXISTS

NOT EXISTS [mysql] - SQL/NoSQL - Programmation

Marsh Posté le 19-06-2007 à 15:11:24    

hello

 

j'ai deux tables de type :


---- table parents -----
--> id
--> nom

 

---- table enfants -----
--> id
--> id parent
--> nom

 

Je voudrais sélectionner tous les parents ayant au moins un enfant.
Je comptais faire avec EXISTS :

Code :
  1. SELECT * FROM parents WHERE
  2. EXISTS (SELECT * FROM enfants WHERE id_parent = parents.id)
 

Mais ça me retourne rien alors que ça devrait :/ Pourquoi donc ? Que faire ?


Message édité par theredled le 19-06-2007 à 15:13:50

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 19-06-2007 à 15:11:24   

Reply

Marsh Posté le 19-06-2007 à 15:47:08    

je ne sais pas pourquoi c ane te retourne rien , mais dans ce cas, je n'utiliserai pas un exists
 
plutot quelque chose comme ca  

Code :
  1. SELECT parents.* FROM parents, enfants WHERE parents.id = enfants.id_parent


 
( eventuellement un SELECT DISTINCT  si tu ne veux les parents qu'une fois )
 

Reply

Marsh Posté le 19-06-2007 à 15:49:08    

flo850 a écrit :

je ne sais pas pourquoi c ane te retourne rien , mais dans ce cas, je n'utiliserai pas un exists
 
plutot quelque chose comme ca  

Code :
  1. SELECT parents.* FROM parents, enfants WHERE parents.id = enfants.id_parent


 
( eventuellement un SELECT DISTINCT  si tu ne veux les parents qu'une fois )


Le truc c'est qu'en vrai je veux faire un DELETE (supprimer tous les parents n'ayant pas d'enfants). Du coup je sais pas si ta soluce est appliquable ?


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 19-06-2007 à 18:19:17    

theredled a écrit :

Le truc c'est qu'en vrai je veux faire un DELETE (supprimer tous les parents n'ayant pas d'enfants). Du coup je sais pas si ta soluce est appliquable ?

 

et avec un truc genre

 

DELETE FROM parents WHERE a.id parent NOT IN (SELECT a.id parent FROM parents a, enfants b WHERE a.id parent = b.id parent)

 

ça pourrait pas le faire :??:

Message cité 1 fois
Message édité par ShadowKnight le 19-06-2007 à 18:20:45

---------------
"Parfois, il faut savoir accepter qu'il ne se passe rien..."
Reply

Marsh Posté le 19-06-2007 à 18:20:36    

stune solution :o
mais j'aimerais bien faire marcher mon NOT EXISTS :/


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 19-06-2007 à 18:24:39    

ben ya pas grand chose à changer si t'y tiens absolument :

 

DELETE FROM parents WHERE a.id parent NOT EXISTS (SELECT a.id parent FROM parents a, enfants b WHERE a.id parent = b.id parent)

  


:o

Message cité 1 fois
Message édité par ShadowKnight le 19-06-2007 à 18:24:49

---------------
"Parfois, il faut savoir accepter qu'il ne se passe rien..."
Reply

Marsh Posté le 19-06-2007 à 22:36:17    

ShadowKnight a écrit :

ben ya pas grand chose à changer si t'y tiens absolument :

 

DELETE FROM parents WHERE a.id parent NOT EXISTS (SELECT a.id parent FROM parents a, enfants b WHERE a.id parent = b.id parent)

 

:o


je pense pas que ça marche ça :D

Message cité 1 fois
Message édité par theredled le 19-06-2007 à 22:36:25

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 20-06-2007 à 09:26:13    

theredled a écrit :

je pense pas que ça marche ça :D


+1
Ta 1ere requête me parait correcte, j'aurais juste tendance à éviter le * dans le sous select.
Tu aurais un jeu de test "qui ne marche pas".
 
Par ailleurs, si tu peux evite le NOT IN qui est catastrophique sur les perfs.
 
 
 

Reply

Marsh Posté le 20-06-2007 à 10:06:42    

Oh my god [:ddr555]
C'est mon test qui était foireux [:fing fang fung] (donc la requete était très bien)
Merci le matin :D


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 20-06-2007 à 11:41:48    

Liste des parents sans enfant :
 

Code :
  1. SELECT p.id
  2. FROM parents p
  3. LEFT OUTER JOIN enfants e ON e.parent_id = p.id
  4. WHERE e.id IS NULL

Reply

Marsh Posté le 20-06-2007 à 11:41:48   

Reply

Marsh Posté le 20-06-2007 à 11:42:36    

ça revient exactement à faire un not exists :o

Reply

Marsh Posté le 20-06-2007 à 12:24:10    

Ouais sauf qu'il n'y a pas de not exist :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed