petite aide SQL requete imbriqué

petite aide SQL requete imbriqué - SQL/NoSQL - Programmation

Marsh Posté le 02-12-2004 à 14:42:41    

hello,
je vais essayé d'etre clair:
 
 
je voudrait faire une requete imbriqué avec mysql, une fusion entre ces deux la:
 
select id from table;
 
select * from table2 where id=[resultat de la premiere]  
 
le resultat est donc une liste d'ID
 
 
Je pense que c'est assez clair.
 
Merci pour votre aide :)

Reply

Marsh Posté le 02-12-2004 à 14:42:41   

Reply

Marsh Posté le 02-12-2004 à 14:51:53    

j'ai essayé  
select * from table2 where id IN ( select id from table )
 
il me met une erreur, que je peux pas vraiment recopier car mes tables sont bien plus complexe.
mais ca viens peut etre de la version de mysql ?
les requetes imbriqués c'est surpporté?

Reply

Marsh Posté le 02-12-2004 à 14:56:05    

veryfree a écrit :

j'ai essayé  
les requetes imbriqués c'est surpporté?


 
pour versions >= 4.1 seulement


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 02-12-2004 à 14:59:33    

Sur mysql.com ils y a quelquepart un exemple pour obtenir le bon résultat via des jointures avec les versions antérieures...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-12-2004 à 15:02:08    

simogeo a écrit :

pour versions >= 4.1 seulement


 
j'ai ca dans mon phpinfo:
 
Client API version  3.23.56
 
 
bon et bien, je fait comment maintenant  [:petrus75]

Reply

Marsh Posté le 02-12-2004 à 15:03:57    

skeye a écrit :

Sur mysql.com ils y a quelquepart un exemple pour obtenir le bon résultat via des jointures avec les versions antérieures...


 
ok,jvai voir ca :jap:

Reply

Marsh Posté le 02-12-2004 à 15:04:53    

veryfree a écrit :

j'ai ca dans mon phpinfo:
 
Client API version  3.23.56
 
 
bon et bien, je fait comment maintenant  [:petrus75]


http://dev.mysql.com/doc/mysql/fr/ [...] eries.html


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-12-2004 à 15:36:41    

j'ai presque fini, merci a vous.
 
 
une derniere chose donc:
 
SELECT DISTINCT (`idm` ),email, prenom, pass FROM membres p, `lots` l WHERE l.`date` > '2004-11-01' AND l.idm = p.id AND l.valide = '1'
 
cette requete marche mais pour une raison un peu compliqué, il faut que le premier champs soit l'email mais:
 
SELECT email, prenom, pass,DISTINCT (`idm` )
 
 
ca passe pas.
y a moyen de bricolé ca :D ?

Reply

Marsh Posté le 02-12-2004 à 15:37:54    

...euh le distinct est pas forcément juste derrière le select? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-12-2004 à 15:41:32    

NP : Led Zeppelin - [Remasters (Disc 2) #9] - Achilles Last Stand
 
[:huit]
 
apparemment oui, on peux pas le mettre ailleurs :/

Reply

Marsh Posté le 02-12-2004 à 15:41:32   

Reply

Marsh Posté le 02-12-2004 à 15:42:23    

veryfree a écrit :

NP : Led Zeppelin - [Remasters (Disc 2) #9] - Achilles Last Stand
 
[:huit]
 
apparemment oui, on peux pas le mettre ailleurs :/


...bah alors pourquoi tu le mets après?[:urd]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-12-2004 à 15:44:00    

parce que l'ordre d'apparition de mes champs est tres important :(
 
il peut etre seulement en 4 em position

Reply

Marsh Posté le 02-12-2004 à 15:46:46    

Je veux pas dire de conneries, mais en le mettant au début ton distinct indique qu'un ensemble(email, prenom, pass,`idm`) donné n'apparait qu'une fois...
Distinct sur un seul champ n'a pas de sens, sinon il se passe quoi si tu as 2 lignes avec la même valeur pour ce champ mais des valeurs différentes ailleurs?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-12-2004 à 15:47:06    

c'est bon j'ai reussi [:volta]
 
group by a la fin a la place du distinct et ca rullez :jap:

Reply

Marsh Posté le 02-12-2004 à 15:47:30    

skeye a écrit :

Je veux pas dire de conneries, mais en le mettant au début ton distinct indique qu'un ensemble(email, prenom, pass,`idm`) donné n'apparait qu'une fois...
Distinct sur un seul champ n'a pas de sens, sinon il se passe quoi si tu as 2 lignes avec la même valeur pour ce champ mais des valeurs différentes ailleurs?


 
ce serait vrai s'il n y avait pas de jointure ;)
 
 
edit:  
idm =>"lots"
email, prenom, pass =>"membres"
 


Message édité par veryfree le 02-12-2004 à 15:48:46
Reply

Marsh Posté le 02-12-2004 à 15:51:38    

Euh...
Je vois tjrs pas ce que ça voudrait dire : une jointure ne représente au final qu'une nouvelle table, pas réellement stockée sous cette forme...non? [:urd]
Enfin bref, l'essentiel c'est que tu aies ton résultat... ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-12-2004 à 16:04:41    

je suis pas spé mais je dirait que le distinct entre en action avant la formation de cette table fusionné.
 
[:ohello]

Reply

Marsh Posté le 02-12-2004 à 16:09:42    

skeye a écrit :

Je veux pas dire de conneries, mais en le mettant au début ton distinct indique qu'un ensemble(email, prenom, pass,`idm`) donné n'apparait qu'une fois...
Distinct sur un seul champ n'a pas de sens, sinon il se passe quoi si tu as 2 lignes avec la même valeur pour ce champ mais des valeurs différentes ailleurs?


Vu que distinct ne fait pas partie de la norme SQL, c'est à chacun de voir comment il est implémenté. Dans PgSQL, si tu mes un DISTINCT ON (...), cela ne s'applique qu'au sous-set et celui-ci n'est par retourné dans les valeurs, tandis qu'un DISTINCT simple s'applique sur l'ensemble du tuple. Dans MySQL, le fonctionnement est assez similaire si mes souvenirs sont bons.

Reply

Marsh Posté le 02-12-2004 à 16:20:11    

:jap:
J'aurai appris des choses... ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 03-12-2004 à 14:26:38    

J'arrive un peu après la tempête mais bon...
 
Pour info, t'as absolument pas besoin de faire une sous-requête, ni d'utiliser des bidouilles pour en émuler une avec une jointure droite :heink:
 
T'as une table 1 avec des ID.
 
Et du veux les lignes de table 2 dont l'ID correspond aux ID de table 1 c'est ça ? (c'est du moins l'énnoncé de la question)
 
Alors pourquoi tu fais pas ce qu'on fait dans le cadre d'une bête FK (parceque là, y'a pas à tortiller, c'est une FK de type (0,1) que tu as) : une pauvre bête jointure simple ?
 
select table2.*
from table2, table1
where table2.id = table1.id
 
:heink:
 
En plus, vu le nom "id" de table2, j'en déduis que cette FK qui pointe sur table1 est la PK de table2, donc pas besoin de DISTINCT, puisqu'il est impossible d'avoir des boublons !
 
Y'a des fois, j'vous jure, vous cherchez compliqué pour pas grand chose ;)

Reply

Marsh Posté le 03-12-2004 à 15:50:20    

Arjuna a écrit :

J'arrive un peu après la tempête mais bon...
 
Pour info, t'as absolument pas besoin de faire une sous-requête, ni d'utiliser des bidouilles pour en émuler une avec une jointure droite :heink:
 
T'as une table 1 avec des ID.
 
Et du veux les lignes de table 2 dont l'ID correspond aux ID de table 1 c'est ça ? (c'est du moins l'énnoncé de la question)
 
Alors pourquoi tu fais pas ce qu'on fait dans le cadre d'une bête FK (parceque là, y'a pas à tortiller, c'est une FK de type (0,1) que tu as) : une pauvre bête jointure simple ?
 
select table2.*
from table2, table1
where table2.id = table1.id


 
c'est ce que j'ai fait pendant la tempete hein :D
 
 

Citation :


En plus, vu le nom "id" de table2, j'en déduis que cette FK qui pointe sur table1 est la PK de table2, donc pas besoin de DISTINCT, puisqu'il est impossible d'avoir des boublons !
 
Y'a des fois, j'vous jure, vous cherchez compliqué pour pas grand chose ;)


 
non la c'est bon, la 2 em n'est pas une PK :o
 
le distinct est indispensable
 

Reply

Marsh Posté le 03-12-2004 à 16:17:25    

A ok :)
 
J'avoue que j'ai lu en vitesse le début, et plus ça partait dans tous les sens avec des "faut émuler une sous-requête avec mysql" et plus j'ai pas lu la suite :whistle:


Message édité par Arjuna le 03-12-2004 à 16:17:36
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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