2010-03-17 17 views
12

Es posible lograr el equivalente a una UNIÓN IZQUIERDA con una subselección en la que se requieren varias columnas. Esto es lo que quiero decir.Usando la subselección para realizar la UNIÓN IZQUIERDA

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

Tal como está ahora haciendo esto, me da un error 'El operando debe contener 1 columna (s)'.

Sí, sé que esto es posible con LEFT JOIN, pero me dijeron que era posible con la subselección de Tengo curiosidad sobre cómo se hace.

Respuesta

7

Una subselección solo puede tener una columna devuelta desde allí, por lo que necesitaría una subselección para cada columna que desea devolver de la tabla del modelo.

+0

que de hecho puede devolver múltiples columnas en una subselección aunque no de la manera que quiero. Esta consulta devuelve varias columnas. SELECCIONAR m. *, Modelos. * FROM make m, (SELECCIONAR * FROM modelo LIMIT 1) AS modelos – Andre

+1

Las subconsultas pueden devolver más de una columna desde FROM y JOIN, ya que está trabajando con filas en ese contexto. Como solo trabaja con escalares en el contexto SELECT, solo puede devolver un valor desde una subconsulta. – MisterZimbu

+0

De acuerdo. Gracias. – Andre

16

Existen muchos usos prácticos para lo que sugiere.

Esta consulta hipotética devolvería el más reciente release_date (ejemplo artificioso) de cualquier marca con al menos un 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 
Cuestiones relacionadas