Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Multiple consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=76499)

RebeccaGL 04-11-2011 23:19:04

Multiple consulta SQL
 
Buenas

El problema que tengo es que una consulta sql me da datos erroneos, lo que deseo hacer es sumar los precios de una tabla y en vez de darme un resultado correcto me da uno incorrecto, la consulta deberia darme resultado = 30 pero me lo duplica, lo curioso es que cuando le quito la tercera tabla los resultados salen correctos alguien podria decirme como hacer la consulta de manera correcta.



Código Delphi [-]
select
  T1.Fecha,
  T2.Item,
  T2.sum(Precio), as Precio,
  T3.Modalidad
from
  tabla_1 as T1,
  tabla_2 as T2,
  table_3 as T3
where
  (T1.id = :ID) and
  (T1.id = T2.id) and
  (T1.id = T3.id)
group by
  (T1.Fecha, T2.Item, T3.Modalidad)
order by
  T1.Fecha, T2.Item

CrazySoft 05-11-2011 11:56:19

No tienes ningun campo que relaciona una tabla con otra, por eso te dara cualquier cosa

RebeccaGL 05-11-2011 14:12:02

Si tengo los indices que relacionan las tablas pero no lo puse.

Tabla_1
ID

Tabla_2
ID, IDT1

Tabla_3
ID, IDT1

RebeccaGL 05-11-2011 20:28:32

Aca la consulta completa.
Vean como me duplica los registros, solo deberia salir 1 media parrila y 1 parrila familiar total 220.34, pero la consulta me lo duplica, algun genio que me pueda ayudar.


Código Delphi [-]
select distinct
  VENITM.Item as Item,
  VENTTJ.TipTar as Tarjeta,
  sum(VENITM.cantid) as Cantidad,
  sum(VENITM.PreTot) as Total,
  sum(VENITM.PreIgv) as Igv
from
  ecam_db_lafogata.venmov as VENMOV
inner join
  ecam_db_lafogata.venitm as VENITM
on
  (VENMOV.LINK_0001 = VENITM.LINK_0001) and
  (VENMOV.LINK_0002 = VENITM.LINK_0002) and
  (VENMOV.LINK_0003 = VENITM.LINK_0003) and
  (VENMOV.LINK_0004 = VENITM.LINK_0004) and
  (VENMOV.LINK_0005 = VENITM.LINK_0005)
inner join
  ecam_db_lafogata.venttj as VENTTJ
on
  (VENMOV.LINK_0001 = VENTTJ.LINK_0001) and
  (VENMOV.LINK_0002 = VENTTJ.LINK_0002) and
  (VENMOV.LINK_0003 = VENTTJ.LINK_0003) and
  (VENMOV.LINK_0004 = VENTTJ.LINK_0004) and
  (VENMOV.LINK_0005 = VENTTJ.LINK_0005)
where
  (VENMOV.LINK_0001 = 1) and
  (VENMOV.LINK_0001 = VENITM.LINK_0001) and
  (VENMOV.LINK_0002 = VENITM.LINK_0002) and
  (VENMOV.LINK_0003 = VENITM.LINK_0003) and
  (VENMOV.LINK_0004 = VENITM.LINK_0004) and
  (VENMOV.LINK_0005 = VENITM.LINK_0005) and
  (VENMOV.LINK_0001 = VENTTJ.LINK_0001) and
  (VENMOV.LINK_0002 = VENTTJ.LINK_0002) and
  (VENMOV.LINK_0003 = VENTTJ.LINK_0003) and
  (VENMOV.LINK_0004 = VENTTJ.LINK_0004) and
  (VENMOV.LINK_0005 = VENTTJ.LINK_0005) and
  (VENMOV.Fecha >= '2011/10/16') and
  (VENMOV.Fecha <= '2011/10/16') and
  (VENMOV.Estado <> 'anulado')
group by
  VENMOV.LINK_0001, VENITM.Tipo, VENITM.Item, VENTTJ.TipTar


Casimiro Notevi 05-11-2011 21:19:22

Del select que pusiste en el primer post a este último hay mucha diferencia, montones de campos que no sabemos qué son, ¿por qué no explicas claramente las tablas y sus campos y lo que necesitas hacer?, de otra forma es imposible ayudarte.

RebeccaGL 06-11-2011 12:56:27

Lo que necesito es que no se dupliquen o tripliquen los registros, la consulta sql deberia darme.

1 parrila familiar
1 media parrila

Pero como se ve en la imagen me da 4 registros, cuando le quito la tabla_3 de la clausula from me da los resultados correctos pèro si la pongo todo se malogra, puse los enlaces de cada tabla.

La Tabla_1 esta enlazada con la Tabla_2, y la Tabla_1 tambien esta enlazada con la Tabla_3, entonces en la clusula from seria

Código Delphi [-]
from 
  database.Tabla_1, 
  database.Tabla_2, 
  database.Tabla_3

Si la Tabla_2 tiene 2 registros y la Tabla_3 2 registros, al hacer un select con ambas tablas me los duplica lo que deseo es que no los duplique como puedo hacer eso.



saludos

Godzuki 12-11-2011 07:42:34

Hola. Yo creo que para que puedas trabajar con tus tablas para obtener lo que gustes, necesitas agregar una tabla extra que relacione a las otras tres entre si. De esta forma podrás ejecutar consultas de agrupación sin tener problemas derivados de no tener debidamente relacionadas las tablas entre si. Mi propuesta es la siguiente:

al agregar la tabla RELACION, tenemos bien ligadas a los registros de cada una de tus 3 tablas. Para obtener información, solo debes hacer una consulta que relacione a las 3 tablas dentro de la tabla relación, he aquí unos ejemplos:
La siguiente consulta da un listado de cada venta hecha y la ordena por fecha.
Código SQL [-]
Select Fecha, Item, Preciou, Mod_pago, Numero
From Tabla1 As T1, Tabla2 As T2, Tabla3 As T3, Relacion As Rela
Where T1.id_tabla1 = Rela.id_tabla1 And
T2.id_tabla2 = Rela.id_tabla2 And
T3.id_tabla3 = Rela.id_tabla3
ORDER BY FECHA;
La siguiente consulta da las ventas totales en cada fecha.
Código SQL [-]
Select Fecha, SUM(Preciou)
From Tabla1 As T1, Tabla2 As T2, Tabla3 As T3, Relacion As Rela
Where T1.id_tabla1 = Rela.id_tabla1 And
T2.id_tabla2 = Rela.id_tabla2 And
T3.id_tabla3 = Rela.id_tabla3
GROUP BY FECHA;
Para que esto funcione, en la tabla RELACION debe insertarse en cada campo ID_TABLA1, ID_TABLA2 E ID_TABLA3, los valores de sus respectivos campos en las tablas TABLA1, TABLA2, TABLA3.
Espero que esto te sea de ayuda. Un saludo.


La franja horaria es GMT +2. Ahora son las 12:25:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi