Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/11/2012, 10:51
alyciashape
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Como enlazar multiples tablas. Optimizar consulta

Es decir, se que hay diferentes formas, pero me encuentro conque tengo que enlazar muchas tablas y es un auténtico caos. Para simplificarme la vida lo he intentado hacer a traves de Access y un driver ODBC aver si así, pero es una consulta muy compleja (o puede que mal hecha) y no ejecutando la consulta se queda la vida eterna intentando realizarla hasta que me canso y tengo que colgarlo.

Esta es la consulta, tampoco creo que sea para tanto, lo único malo serían tantos enlaces. Hay un par de tablas que no se usan porque aun me quedan algunos datos por poner (con sumas de precios para mas inri) pero es que ya si no saco ni esto.

Se que se pueden hacer las relaciones de varias formas. Yo suelo usar esta, aunque se alguna más:
· WHERE tabla1 = tabla2 USING(clave)

Me suena que hay alguna forma de enlazar multiples tablas que usen la misma clave pero no estoy seguro de como es. Aquí la consulta que me crea el access automáticamente tras decirle que campos quiero consultar. La base de datos es un caos no la diseñé yo y está fatal hecha, así que tampoco ayuda.

Código MySQL:
Ver original
  1. SELECT clientes.clacli AS CÓDIGO, articulo.nombre AS NOMBRE, clientes.direccion AS DIRECCIÓN, clientes.localidad AS LOCALIDAD, clientes.telefono AS TELÉFONO, clientes.contacto AS CONTACTO, clientes.provincia AS PROVINCIA, tarifa.nombre AS TARIFA
  2. FROM articulo, catart, factural, tarifa, (factura INNER JOIN clientes ON factura.clacli=clientes.clacli) INNER JOIN tiposcli ON clientes.clatip=tiposcli.clatip
  3. WHERE articulo.clacat=21 And clientes.clatip=2;
Como veis los enlaces entre tablas son excesivamente complejos, me imagino que por eso se muere.

He intentado hacerlo a mano pero no logro seguir un orden lógico.
Si enlazo articulo con catart (categoria articulo) luego esta categoria con cual la voy a enlazar? no se si me explico. Hay que seguir un orden no?

Este es el meollo:
TABLA -> Su clave y las que llama

articulo
claart(pk)
clacat (fk de categoria articulo)


factura
clafac(pk)


factural
clafacl (pk)
clafact (fk de factura)

tarifa
clatar (pk)

clientes
clacli (pk)
clatar (fk)
clatip (fk)

tiposcli
clatip (pk)

catart
clacat (pk)

Como veis los nombres de las tablas e ids tampoco ayudan mucho. Un auténtico lío. No pido que me hagais la relación sino la sintaxis para poder enlazar varias tablas porque no encuentro un orden en el que hacerlo.

Extra: También si alguno de vosotros sabe me gustaría saber si en una subconsulta puedo hacer referencia a alguna de las claves de la consulta normal. Algo así:
SELECT campos, (SELECT otras_cosas FROM tablas WHERE id_de_la_otra_consulta) FROM tablas

Es decir que para cada id de la consulta principal me busque en la subconsulta.

Última edición por alyciashape; 08/11/2012 a las 11:15 Razón: Mal etiquetado de codigo SQL