PDA

Ver la Versión Completa : Tabla con varios lookups a otras. Y otra tabla con un lookup a la primera. En SQL


Wonni
25-06-2007, 20:10:12
hola;

No consigo saber como construir una consulta en SQL. He buscado aqui y en el libro SQL de Francisco Charte, pero no me aclaro.

Se trata de una tabla con varios campos. 5 de ellos deberian ser lookups. Pero quiero poder ordenar tambien por estos campos lookup, asi que segun he investigado por los foros, lo mejor es hacerlo con SQL. Además, es lo que trato de hacer ahora, lo posible en SQL.

Tengo una tabla LIBROS y otra LISTAS. En la tabla LISTAS simplemente tengo 3 campos: ID_CENTRO, ID_CURSO, ISBN.

El campo ISBN es el enlace a la tabla LIBROS que tambien tiene un campo ISBN.

En la tabla LIBROS deben existir varios campos lookup hacia otras tablas como por ejemplo: EDITORIAL, ASIGNATURA, IDIOMA.

No se como hacer en SQL para colocar los lookups en la tabla LIBROS a las tablas Editorial, Asginatura, Idioma y despues en la tabla LISTAS el lookup a la tabla LIBROS con el campo ISBN para obtener los datos del libro.

Decir que para editar registros utilizaria otros Querys. Lo digo por que he buscado aqui en los foros y ese problema aparecia varias veces. Pero esta consulta solo seria para no editar, solo ver.

ramiretor
25-06-2007, 22:33:19
Hola:
Pues tu pregunta es muy ambigua, pero una rapida contestación es que tienes que hacer inner join entre las tablas Libros y Listas, Editorial, Asignatura e Idiomas

Saludos

Wonni
25-06-2007, 22:39:12
gracias ramiretor;

Estaba yo pensando que seria con OUTER JOIN

Voy a repasar el libro de Charte otra vez a ver si lo consigo. Esque soy totalmente nuevo en esto de SQL :o

ramiretor
25-06-2007, 23:11:03
Pues es que el Outer es para registros que están en una tabla pero no en la otra, mas bien, necesitas un manual de SQL, si das información de los campos en que se relacionan las tablas tal vez te podamos ayudar para sacar la consulta

Saludos

Wonni
25-06-2007, 23:49:17
Si, si manua tengo(el libro de Charte, ClubDelphi, Google) pero como soy totalmente novato y la consulta no es sencilla precisamente. Vamos que no he empezado asi con algo como: SELECT * FROM TABLA :p

Voy a detallar la estructura de Tablas, para ver si me podeis ayudar. Os lo agradezco mucho. Si no me fuera urgente, trataria de averiguar mas por mi cuenta. Aunque sigo en ello, por supuesto ;)




TABLA CURSOS:

ID_CURSO - DESCRIP - NIVEL - ORDEN

TABLA ASIGNATURAS:

ID_ASIGN - DESCRIP

TABLA EDITORIALES:

ID_EDITOR - DESCRIP




TABLA LIBROS:

ID_CURSO - ID_ASIGN - ID_EDITOR - TITULO - ISBN



TABLA LISTAS:

ISBN - ID_CENTRO - ID_CURSO - OPTATIVA - F_IMPLAN


En la tabla listas ha de aparecer todo. Lo filtraré con una Clausula Where con los campos ID_CENTRO - ID_CURSO. Pero el caso es que deben salir todos los demas campos.

Para introducir un libro en las LISTAS, este debe estar dado de alta en LIBROS.

Y claro, la tabla LISTAS la debo poder ordenar por TITULO, ISBN, ORDEN(del curso. El cual está en la tabla CURSOS), ASIGNATURA, EDITORIAL . . .


Tal vez estoy pidiendo demasiado. La verdad es complicado, por lo menos eso me parece a mi ahora.

ramiretor
26-06-2007, 00:15:49
Hola pues no tanto.
Cuando usas varias tablas se recomienda usar letras para diferenciar una de otra, supongo que traes todos los campos de libros (y como tampoco dices que motor de BD usas) puede variar un poco



SELECT A.* FROM LIBROS A
INNER JOIN CURSOS B ON A.ID_CURSO = B.ID_CURSO
INNER JOIN ASIGNATURA C ON A.ID_ASIG = C.ID_ASIG
INNER JOIN EDITORIAL D ON A.ID_EDITOR = B.ID_EDITOR
INNER JOIN LISTAS E ON A.ISBN = E.ISBN
WHERE .....


Saludos