Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/12/2011, 05:16
guilopezcas
 
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 12 años, 6 meses
Puntos: 0
Cómo consigo esto?

Hola,
tengo un problema de bases de datos con MySQL, a ver si me pudiérais ayudar:
Tengo dos tablas, distribuidas de esta forma:

tabla 1
Nif Nombre
3232 Luis
1232 Paco
1242 Juan

tabla 2
Nif Rasgo Tipo
3232 Pelo Rubio
3232 Ojos Azules
3232 Altura 180
3232 Especial Lunares
1232 Pelo Rubio
1232 Ojos Marrones
1232 Altura 180
2324 Pelo Moreno
2324 Ojos Azules
2324 Altura 150

Y necesito obtener esto:

Nif Nombre Pelo Ojos Altura Especial
3232 Luis
1232 Paco
1242 Juan

Estoy utilizando LEFT OUTER JOIN, utilizando varias veces la tabla 2, y filtrando por el rasgo, algo así:
SELECT * FROM tabla1 LEFT OUTER JOIN tabla2 t2_1 ON tabla1.Nif=t2_1.Nif LEFT OUTER JOIN tabla2 t2_2 ON tabla1.Nif=t2_2.Nif
LEFT OUTER JOIN tabla2 t2_3 ON tabla1.Nif=t2_3.Nif LEFT OUTER JOIN tabla2 t2_4 ON tabla1.Nif=t2_4.Nif
WHERE t2_1.Rasgo=Pelo t2_2.Rasgo=Ojos t2_3.Rasgo=Altura

Y aquí viene mi problema, si pongo t2_4.Rasgo=Especial , sólo me va a salir la línea de la persona con un rasgo especial, y si no pongo nada,
se me multiplican las líneas de la consulta...
Una solución sería añadir el rasto "Especial" a todas las personas, pero esto me aumentará el número de líneas de la tabla muchísimo, y perderé
rapidez de búsqueda.

¿Se os ocurre otra forma de plantear la consulta para que salga bien sin tener que añadir el rasgo especial en blanco a todos los indivídulos?

Muchas gracias.