2010-03-17 2 views
12

Il est possible d'obtenir l'équivalent d'un LEFT JOIN avec une sous-sélection lorsque plusieurs colonnes sont requises. Voici ce que je veux dire. En l'état actuel, cela me donne une erreur 'L'opérande devrait contenir 1 colonne (s)'.Utilisation de sous-sélection pour accomplir LEFT JOIN

Oui, je sais que c'est possible avec LEFT JOIN, mais on m'a dit que c'était possible avec une sous-sélection, je suis curieux de savoir comment cela se fait.

Répondre

7

Une sous-sélection ne peut renvoyer qu'une seule colonne. Vous devez donc sélectionner une sous-liste pour chaque colonne que vous souhaitez renvoyer de la table modèle.

+0

Je peux en effet retourner plusieurs colonnes dans une sous-sélection mais pas de la façon dont je veux. Cette requête renvoie plusieurs colonnes. SELECT m. *, Modèles. * FROM make m, (SELECT * FROM modèle LIMIT 1) AS modèles – Andre

+1

Les sous-requêtes peuvent renvoyer plusieurs colonnes de FROMs et JOINs, puisque vous travaillez avec des lignes dans ce contexte. Puisque vous ne travaillez qu'avec des scalaires dans le contexte SELECT, vous ne pouvez y retourner qu'une seule valeur d'une sous-requête. – MisterZimbu

+0

D'accord. Je vous remercie. – Andre

16

Il y a beaucoup d'utilisations pratiques pour ce que vous suggérez.

Cette requête hypothétique retour le plus récent release_date (exemple artificiel) pour tout faire avec au moins un release_date, et nulle pour tout faire sans release_date:

SELECT m.make_name, 
     sub.max_release_date 
    FROM make m 
     LEFT JOIN 
      (SELECT id, 
        max(release_date) as max_release_date 
       FROM make 
      GROUP BY 1) sub 
     ON sub.id = m.id