Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/02/2007, 18:23
Zagalet
 
Fecha de Ingreso: diciembre-2003
Mensajes: 19
Antigüedad: 20 años, 5 meses
Puntos: 0
Uso de IF THEN al relacionar tablas

Hola, estoy intentando resolver un problema que no logro resolver ya que contiene muchas tablas vinculadas.
Para que se entienda la idea pondré un ejemplo simple pero que explica la situación:
Tengo una tabla libros, otra autores, otra tematicas, otra editoriales...

Tabla LIBROS
-------------
id
titulo
autor ---> id de tabla autores
tematicas ---> id de tabla tematicas
editorial --->id de tabla editorial

Tabla AUTORES
---------------
id
autor

Tabla TEMATICAS
-----------------
id
tema

Tabla EDITORIALES
------------------
id
editorial


Cuando genero una busqueda voy agregando sentencias where y campos a la consulta sql segun los filtros al rellenar el formulario de busqueda, pero si no completo ningun filtro y quiero mostrar todos no me aparecen los que por ejemplo aun no tienen el campo editorial completo.
Desde la aplicación se requiere para completar la entrada pero el problema me viene ya que se entan introduciendo datos de otras bdd que no todas estan completas.

SQL para relacionar las tablas y devolver todos los resultados:

SELECT libros.titulo,autores.autor,tematicas.tema,editori ales.editorial
FROM libros,autores,tematicas,editoriales
WHERE
libros.autor=autores.id
AND libros.tematicas=tematicas.id
AND libros.editorial=editoriales.id

(en el where hago la asociacion de tablas)
si estuvieran completos todos los campos me daria algo como:

TITULO | AUTOR | TEMA | EDITORIAL
----------------------------------------------------------
Lo que sea | Juan Perez | Comedia | Centauro
Otro libro | Manolo Garcia | Drama | Planeta
Incompleto | Luis Mendez | NULL | Centauro

El 3er libro no tiene introducido el tema del libro, por lo tanto seria un NULL, pero como en la asociacion de tablas pongo que:

libros.tematicas=tematicas.id <--- y esto no existe para este libro pues no me devuele el esta fila.

He intentado utilizar IF THEN ELSE para cada una de las asociaciones pero no he sacado nada en limpio.
Como seguro que esto tiene solucion pero no doy con ella por mucho manual que me lea, a ver si alguien me indica un poco el camino a seguir

Gracias