Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

subconsultas

Estas en el tema de subconsultas en el foro de Mysql en Foros del Web. Hola soy nueva en esto y quiero hacer unas cinsultas desde varias tablas tengo las siguientes tablas cabecera (id,num_fac,fecha,monto) factura (id_fac,id_cli,id_pro,num_fac,cantidad) Quiero sacar datos de ...
  #1 (permalink)  
Antiguo 16/11/2010, 22:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 75
Antigüedad: 13 años, 6 meses
Puntos: 0
subconsultas

Hola soy nueva en esto y quiero hacer unas cinsultas desde varias tablas tengo las siguientes tablas

cabecera (id,num_fac,fecha,monto)
factura (id_fac,id_cli,id_pro,num_fac,cantidad)

Quiero sacar datos de estas paginas, pero de la tabla factura hay id de los cuales quiero sacar el nombre y apellido del cliente que se encuentra en la tabla cliente.

PD: la tabla factura su llave primaria son las tres primeras columnas id_fac,id_cli,id_pro.


Espero y me puedan ayudar


Gracias
  #2 (permalink)  
Antiguo 17/11/2010, 09:08
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: subconsultas

Saludos, en primer lugar, la tabla factura tiene 3 claves primarias!?

ok, sacando nombre y apellido de la tabla cliente según la factura, la consulta sería así:

SELECT * FROM factura,cliente WHERE id_cli=cliente.id;

(Estoy suponiendo que el nombre del campo de id de la tabla cliente se llama "id")

con eso tendrás una lista de todas las facturas con el nombre y apellido de cada cliente.

saludos!
  #3 (permalink)  
Antiguo 17/11/2010, 10:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 75
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: subconsultas

Gracias, pero no funcionaaaaa.... no se que hacer, me explico bien, tengo cuatro tablas,

factura (id_fac,id_cli,id_pro,num_fac, cantidad) (Primary Index "id_fac,id_cli,id_pro")
cabecera (Id,num_fac,fecha,monto) (Primary Index "Id unique" - Llave unica "num_fac")
cliente (ced_cli,nom_cli,ape_cli,tel_cli,dir_cli,mail_cli) (Primary Index "ced_Cli")

Ahora bien quiero una consulta solo con los siguietnes campos.

fecha,num_fac,nom_cli,ape_cli,cantidad,monto.

Es para un reporte

Ahora bien en cantidad quiero que me separe la cantidad por tipo de producto id_pro, es decir tengo que poner la cantidad de acuerdo al id en cada sitio distinto (hay una columna para cada tipo de producto), no se si tambien tendria que jalar la tabla producto.


Agradecere me puedan ayudar.

Gracias
  #4 (permalink)  
Antiguo 17/11/2010, 10:54
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: subconsultas

Saludos

Si tambien debes colocar la tabla producto para que puedas pintar el nombre del producto

Esto seria una idea, verifica de igual manera qeu se ejecute correctamente y agrega la tabla producto

Código MySQL:
Ver original
  1. c.fecha,f.num_fac,cli.nom_cli,cli.ape_cli,f.cantidad,c.monto
  2. FROM factura f
  3. INNER JOIN  cabecera c  ON c.num_fac=f.num_fac
  4. INNER JOIN cliente cli ON cli.ced_cli=f.id_cli
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #5 (permalink)  
Antiguo 17/11/2010, 11:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: subconsultas

Código MySQL:
Ver original
  1.     C.id,
  2.     C.num_fac,
  3.     C.fecha,
  4.     C.monto,
  5.     F.id_cli,
  6.     N.nombre
  7.     F.id_pro,
  8.     F.cantidad
  9.     cabecera C INNER JOIN
  10.     factura F USING(num_fac) INNER JOIN
  11.     cliente N USING(id_cli);

De todos modos hay un par de detalles para analizar del modelo que propones.
1) La "cabecera" de una factura no necesita un "ID" propio. El número de factura es suficiente para identificarlo, porque además es atributo propio de la factura. Y "cabecera" no es un buen nombre. En realidad esa tabla es FACTURA.
2) La que pones en "factura" es en realidad el detalle de la factura, por lo que debería llamarse algo así como FACTURA_DETALLE.
3) El id del cliente no es un atributo del detalle, sino de la factura.
4) El monto es un atributo calculable. Sólo se almacena si corresponde a un monto puesto con descuentos o consideraciones distintas. Si proviene de la suma, no se almacena.
5) La PK de una factura es siempre su número, y como mucho también el identificador de sucursal o punto de venta, pero no el cliente. El cliente no puede ser parte de la PK porque en ese caso dos clientes podrían tener el mismo numero de factura sin romper la unicidad de la clave.
6) EN el detalle de la factura falta el número de subitem, renglón o línea. Ambos componen la PK de esa tabla y uno es a la vez, FK. No puede ser el ID del producto con la factura y el cliente, proque una factura puede llegar a contener (sucede en la vida real) más de una vez el mismo producto con diferentes cantidades en la misma compra....

¿Se comprende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 17/11/2010, 11:07
 
Fecha de Ingreso: noviembre-2010
Mensajes: 75
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: subconsultas

Si me sale la consulta en mysql, pero me muestra todos los campos
esta es la consulta

select cabecera.num_fac,cabecera.fecha,cabecera.monto,cli ente.nom_cli,cliente.ape_cli,factura.id_pro
from cabecera,factura,cliente where (cabecera.num_fac=factura.num_fac and factura.id_cli=cliente.ced_cli)

ahora bien me sale todo con varias filas repetidas (es decir, si he ingresado ams de un producto para una factura) y eso es lo que no quiero osea quiero que me salga en un solo registro y me genere varias columnas de acuerdo a la cantidad de producto que tengo ingresados, me explico si tengo 10 productos me genere 10 columnas para poner la cantidad de compra de cada producto.


Espero me puedan ayudar, gracias
  #7 (permalink)  
Antiguo 17/11/2010, 11:18
 
Fecha de Ingreso: noviembre-2010
Mensajes: 75
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: subconsultas

gnzsoloyo, gracias por tus recomendaciones, tienes razon, lo que pasa es que no se como hacer hacer una tabla para el modulo de ventas de mi base de datos si me das una estructura lo hare, gracias.

En algunos casos no entiendo lo que me quieres decir, a ver si me pasas un modelo, ya que el modelo de ventas lo saque de internet.


Gracias
  #8 (permalink)  
Antiguo 17/11/2010, 11:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: subconsultas

MySQL no tiene funciones para pivotear tablas (o invertirlas), tal como lo quieres hacer.
En todo caso, eso es asunto de la aplicación, no de la base de datos.

Generar una consulta como la que deseas implica una de dos cosas o las dos:
1) Hacer una consulta con funciones de agregación (SUM(), COUNT(), etc) y con GROUP BY...
2) Crear dinámicamente la sumatoria de productos, ya que a priori no tienes modo de saber cuántas columnas necesitarás.

Es más sencillo de lograr tomando la tabla resultado y representando lo que necesitas en la aplicación, que es donde realmente se visualizan los datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:42.