Es posible lograr el equivalente de un LEFT JOIN con subselección donde varias columnas son necesarios.
Aquí es lo que quiero decir.

SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m

Tal y como está ahora haciendo esto me da un ‘Operando debe contener 1 columna(s)’ error.

Sí, sé que esto es posible con LEFT JOIN, pero me dijeron que era posible con subselección que soy curioso en cuanto a cómo se hace.

OriginalEl autor Andre | 2010-03-17

2 Comentarios

  1. 7

    Una subselección sólo puede tener una columna devuelta a partir de ella, por lo que tendría una subselección para cada columna que desea que se devuelvan a partir de la tabla de modelo.

    De hecho puedo volver varias columnas en una subselección aunque no en la forma que yo quiero. Esta consulta devuelve varias columnas. SELECCIONE m.*, de los modelos.* DE la m, (SELECT * FROM modelo de LÍMITE 1) COMO modelos
    Las subconsultas pueden devolver más de una columna de Formas y Combinaciones, ya que estamos trabajando con filas en ese contexto. Puesto que usted está trabajando sólo con los escalares en el contextual SELECCIONAR sólo puede devolver un valor desde una subconsulta allí.
    De acuerdo. Gracias.

    OriginalEl autor MisterZimbu

  2. 19

    Hay muchos usos prácticos para lo que usted sugiere.

    Esta hipotética consulta devolverá el más reciente release_date (ejemplo inventado) para cualquier marca, con al menos una release_date, y nula para cualquier marca, sin 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

    OriginalEl autor bernie

Dejar respuesta

Please enter your comment!
Please enter your name here