inner/left/right join (muy basico)

30/06/2005 - 22:57 por Adrian Alvarez | Informe spam
Tengo una duda EXTREMADAMENTE basica, pero son tantos años de programar con
el viejo estilo de joins (uniendo las tablas en el WHERE) que a duras penas
me acostumbre a usar el INNER JOIN cuando si o si hay registros
relacionados.

El problema simplificado es el siguiente.

Una tabla Productos (codigo, descripcion) y una tabla Imagenes (producto,
imagen, esprincipal) en la que productos.codigo = imagenes.producto.

El tema es q no todos los productos tienen imagenes, pero yo los quiero
mostrar de todos modos aunque no las tengan. Eso lo solucionaria con el
LEFT JOIN. Peeero, hay productos q tienen muchas imagenes, y yo solo quiero
mostrar la que esta marcada como "esprincipal"

Probe con el SELECT p.descripcion, i.imagen FROM productos p LEFT JOIN
imagenes i ON (p.codigo = i.producto) WHERE i.esprincipal = 1 y solo me
muestra los productos que si tienen imagen asociada.

Como deberia ser la consulta para obtener TODOS los productos, tengan o no
imagen, y SOLO una linea si tienen muchas imagenes (aquella que esprincipal
= 1)

Desde ya muchas gracias.
 

Leer las respuestas

#1 Camilo Acosta
30/06/2005 - 23:06 | Informe spam
Proba con:

WHERE i.esprincipal = 1 or i.esprincipal IS NULL


"Adrian Alvarez" escribió en el mensaje
news:
Tengo una duda EXTREMADAMENTE basica, pero son tantos años de programar
con
el viejo estilo de joins (uniendo las tablas en el WHERE) que a duras
penas
me acostumbre a usar el INNER JOIN cuando si o si hay registros
relacionados.

El problema simplificado es el siguiente.

Una tabla Productos (codigo, descripcion) y una tabla Imagenes (producto,
imagen, esprincipal) en la que productos.codigo = imagenes.producto.

El tema es q no todos los productos tienen imagenes, pero yo los quiero
mostrar de todos modos aunque no las tengan. Eso lo solucionaria con el
LEFT JOIN. Peeero, hay productos q tienen muchas imagenes, y yo solo
quiero
mostrar la que esta marcada como "esprincipal"

Probe con el SELECT p.descripcion, i.imagen FROM productos p LEFT JOIN
imagenes i ON (p.codigo = i.producto) WHERE i.esprincipal = 1 y solo me
muestra los productos que si tienen imagen asociada.

Como deberia ser la consulta para obtener TODOS los productos, tengan o no
imagen, y SOLO una linea si tienen muchas imagenes (aquella que
esprincipal
= 1)

Desde ya muchas gracias.


Preguntas similares