Faire 2 requetes sql en une seule

doom
WRInaute discret
WRInaute discret
 
Messages: 155
Inscription: 21 Déc 2003

Faire 2 requetes sql en une seule

Message le Lun Déc 18, 2006 14:44

bonjour à tous,

voilà, je sais que la version de mysql installé sur mon serveur (la 5 je crois) me permet d'imbriquer les requêtes sql les une dans les autres.

La j'aimerai réaliser un requête mais je n'arrive pas à la mettre en forme, je vous explique :

j'ai une table1 qui contient un champ email, et une table2 qui contient un champ email2. J'aimerai faire une requête sql qui sélectionne ceux présents dans la table1 mais absent de la table2.
Je ne sais pas du tout comment m'y prendre :( j’attends votre aide avec impatience!

merci d'avance

doom


finstreet
WRInaute accro
WRInaute accro
 
Messages: 16999
Inscription: 10 Juil 2005

Message le Lun Déc 18, 2006 14:46

c pas de la requete imbriquée... regarde du coté du LEFT JOIN


Bh@Mp0
WRInaute discret
WRInaute discret
 
Messages: 245
Inscription: 18 Jan 2005

Message le Lun Déc 18, 2006 14:53

finstreet> c'est toi qui te gourres là :)

Code: Tout sélectionner
SELECT `table1`.`email` FROM `table1` WHERE `table1`.`email` NOT IN (SELECT `table2`.`email2` FROM `table2`)

petit-ourson
WRInaute impliqué
WRInaute impliqué
 
Messages: 855
Inscription: 31 Mai 2004

Message le Lun Déc 18, 2006 14:58

Bh@Mp0 a écrit:finstreet> c'est toi qui te gourres là :)

On peut aussi le faire avec dur RIGHT JOIN ou du LEFT JOIN.

jexl
WRInaute discret
WRInaute discret
 
Messages: 224
Inscription: 23 Juin 2005

Message le Lun Déc 18, 2006 15:00

Tu peux aussi, simpliement, remplacer tes tables par des SELECT, je m'explique :

Code: Tout sélectionner
SELECT *
FROM(
     SELECT
email as mail1 from table1
WHERE
'ta condition'
) A INNER JOIN(
     SELECT
email as mail2 from table2
WHERE
'ta condition'
) B
ON A.id= B.id


@+


Bh@Mp0
WRInaute discret
WRInaute discret
 
Messages: 245
Inscription: 18 Jan 2005

Message le Lun Déc 18, 2006 15:14

petit-ourson> les join sont très utiles quand il s'agit de trouver des analogies entre des tables, pas tellement quand on veut trouver des différences (on peut toujours le faire avec des join, mais c'est plus du bricolage alors qu'il existe les requêtes imbriquées)

jexl> ta solution, bien que plaisante et compliquée à souhait, ne fait pas ce que demande l'auteur du post initial :)


finstreet
WRInaute accro
WRInaute accro
 
Messages: 16999
Inscription: 10 Juil 2005

Message le Lun Déc 18, 2006 15:23

Bh@Mp0 a écrit:petit-ourson> les join sont très utiles quand il s'agit de trouver des analogies entre des tables, pas tellement quand on veut trouver des différences (on peut toujours le faire avec des join, mais c'est plus du bricolage alors qu'il existe les requêtes imbriquées)


Et au niveau des performances ? ce sera pas le bricolage le + rapide ? :)

jexl
WRInaute discret
WRInaute discret
 
Messages: 224
Inscription: 23 Juin 2005

Message le Mar Déc 19, 2006 10:18

Bh@Mp0 -> a oui effectivement, j'avais pas lu jusqu'au bout. :D

Alors voila ce qui pourrait aussi marcher :


Code: Tout sélectionner
SELECT     DISTINCT mail
      FROM
      table1 A LEFT OUTER JOIN
        (SELECT DISTINCT mail
         FROM          table2
         WHERE ) B ON A.id= b.id
      WHERE  (B.mail IS NULL)


Ca devrait marcher


narayana
WRInaute impliqué
WRInaute impliqué
 
Messages: 835
Inscription: 28 Jan 2005

Message le Mar Déc 19, 2006 10:33

finstreet a écrit:
Bh@Mp0 a écrit:petit-ourson> les join sont très utiles quand il s'agit de trouver des analogies entre des tables, pas tellement quand on veut trouver des différences (on peut toujours le faire avec des join, mais c'est plus du bricolage alors qu'il existe les requêtes imbriquées)


Et au niveau des performances ? ce sera pas le bricolage le + rapide ? :)


Je pense que cela dépend de la structure de la table (index?) mais un explain devrait notifier ces performances


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités