Résolu mysql - condition WHERE qui soit résultat d'un autre SELECT

  • Auteur de la discussion FireBird
  • Date de début

FireBird

Grand Maître
Toujours sur le même sujet, pour embêter un peu
J'ai une table clients avec 3 champs id, reference et age. Les 2 derniers étant des textes.

Ayant l'id d'un client X, j'aimerais récupérer tous les clients dont les 4 premières lettres de reference soit identique à celles du client X.

exemple:
id | reference | age
1 | 4bujtttt12 | 35
2 | xvcubuj4 | 28
4 | 4bujdfdfdf | 41
5 | wereztrrr | 19
6 | xvcubuj45 | 32
7 | wereztrrr | 37
8 | 4bujdfdfdf | 30
9 | xvcubuj45 | 41
10 | xvcubuj4 | 26
11 | 4bujtxtxdf | 21
12 | wereztrrr | 32

Résultats pour le client id = 12
5 | wereztrrr | 19
7 | wereztrrr | 37

J'ai fait une jointure:

Code:
SELECT
  t1.id,
  t1.reference,
  t1.age
FROM clients t1
JOIN (
  SELECT
    clients.id,
    clients.reference,
    LEFT(clients.reference, 4) leftref4
  FROM clients
  WHERE clients.id=310
) t2
ON LEFT(t1.reference, 4)=t2.leftref4
WHERE t2.id<>t1.id

ça marche assez bien

J'aimerais savoir si il y a meilleure manière de faire. Surtout si on peut éviter la jointure.

Merci
 

zeb

Modérateur
Meilleure réponse
Salut,

Ben il est très bien ton code.
(Sauf que tu surcharges un peu l'écriture et que tu sélectionnes des champs inutiles. Mais pour ce qui est de la jointure, c'est nickel.)

On peut toujours éviter une jointure.
Exemple :
SQL:
SELECT id,
       reference,
       age
  FROM clients
 WHERE LEFT(reference, 4) =  LEFT(( SELECT reference
                                      FROM clients 
                                     WHERE id = 310 ), 4)
   AND id                 <> 310

Mais ce n'est pas forcément une amélioration que de supprimer une jointure.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 981
Membres
1 586 384
Dernier membre
ChelseaKahn
Partager cette page
Haut