Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ayuda con consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=85983)

mordaz 03-06-2014 06:14:56

Ayuda con consulta SQL
 
Que tal,

Alguien me puede ayudar a optimizar esta consulta:

Código SQL [-]
SELECT M.CORTE,R.ORDEN,R.CODIGO,A.ARTICULO,R.CANTIDAD,R.PRECIO,R.IMPORTE
  FROM (RESTAURANTE_CONCEPTOS R LEFT JOIN ARTICULOS A ON R.CODIGO=A.CODIGO) LEFT JOIN MOVIMIENTOS_MESAS M ON R.MOV_MESA_KEY=M.MOV_MESA_KEY
 WHERE M.CORTE=1
   AND M.Cancelado='*'

Esta es parte de las tablas

Código Delphi [-]
TABLE "MOVIMIENTOS_MESAS" 
(
  "MOV_MESA_KEY"  INTEGER NOT NULL,
  "CORTE"  INTEGER,
  "CANCELADO"  CHAR(1),
  PRIMARY KEY ("MOV_MESA_KEY")
);

Código Delphi [-]
TABLE "RESTAURANTE_CONCEPTOS" 
(
  "MOV_MESA_KEY"  INTEGER NOT NULL,
  "ORDEN"  INTEGER NOT NULL,
  "CODIGO"  VARCHAR(25) NOT NULL,
  "CANTIDAD"  INTEGER,
  "PRECIO"  FLOAT,
  "IMPORTE"  FLOAT,
);

Código Delphi [-]
TABLE "ARTICULOS" 
(
  "CODIGO"  VARCHAR(25) NOT NULL,
  "ARTICULO"  VARCHAR(40) NOT NULL,
 PRIMARY KEY ("CODIGO")
}

Gracias por su ayuda..

Casimiro Notevi 03-06-2014 11:39:16

Cita:

Empezado por mordaz (Mensaje 477230)
Alguien me puede ayudar a optimizar esta consulta:

Sí, alguien puede ayudarte en... ¿optimizar qué?

mordaz 03-06-2014 19:22:18

Cita:

Empezado por Casimiro Notevi (Mensaje 477236)
Sí, alguien puede ayudarte en... ¿optimizar qué?

Gracias Casimiro, disculpa me falto un poco de explicacion, esta consulta funciona pero tarda mas de media hora en arrojar un resultado. No se me ocurre otra forma de hacerla.

Si alguien tiene mas conocimiento de Interbase o Firebird, existirá otra forma de realizar esta consulta?

Gracias por su tiempo.

mordaz 03-06-2014 19:32:05

Código SQL [-]
SELECT M.CORTE,R.ORDEN,R.CODIGO,R.CANTIDAD,R.PRECIO,R.IMPORTE
  FROM RESTAURANTE_CONCEPTOS R LEFT JOIN MOVIMIENTOS_MESAS M ON R.MOV_MESA_KEY=M.MOV_MESA_KEY
 WHERE M.CORTE=1
   AND M.Cancelado='*'

El problema esta aquí:

Restaurante_conceptos contiene una lista de varios registros que corresponden a uno solo de la tabla de Movimientos_Mesas, si bien ambas tablas tienen una cantidad considerable de registros no encuentro la manera de hacer esta consulta mas eficiente.

Casimiro Notevi 03-06-2014 21:16:41

Creo que necesitas explicarte mejor :)

AzidRain 03-06-2014 21:43:34

Sería mucho más fácil que explicaras que quieres lograr, poniendo tablas así como lo hiciste no nos ayuda mucho para saber exactamente que lógica tienes en mente. Lo único que se puede deducir es que:

Estas haciendo una aplicación para restaurante
Tienes una tabla de conceptos.
Tienes una tabla "movimientos_mesa" (que quien sabe que registre)

pero no sabemos que información quieres obtener, es más fácil si nos dices tengo tales tablas y quiero una consulta que me devuelva tal cosa.

juanelo 03-06-2014 22:12:32

Que tal,
Tratando de entender y echando un poco de imaginacion deduzco:
1.- El codigo del producto de cada Concepto tiene que existir en la tabla de Articulos, por lo tanto este campo a fuerza deberia de estar en ambas tablas, luego yo sustituiria el LEFT por el INNER:
Código SQL [-]
SELECT M.CORTE,R.ORDEN,R.CODIGO,A.ARTICULO,R.CANTIDAD,R.PRECIO,R.IMPORTE   FROM RESTAURANTE_CONCEPTOS R 
     INNER JOIN ARTICULOS A ON R.CODIGO=A.CODIGO 
     LEFT JOIN MOVIMIENTOS_MESAS M ON R.MOV_MESA_KEY=M.MOV_MESA_KEY  WHERE M.CORTE=1    AND M.Cancelado='*'

2.- No indicas si la llave M.MOV_MESA_KEY es unica, si asi fuere aplicaria lo mismo que el punto 1.

Saludos

oscarac 05-06-2014 06:41:13

yo creo que debes explicar mejor que es lo q quieres conseguir
que informacion guardas en cada tabla

supongo q articulos es obvio que contiene un listado de articulos

movimiento_mesas que informacion guarda? al no ver cantidades ni precios imagino que debe ser un catalogo de mesas

restaurante_Conceptos al parecer son los articulos en venta

suponiendo que yo este en lo correcto que es lo q quieres reportar?

fjcg02 05-06-2014 10:35:07

Me huele que puede faltar algún índice en lo campos por los que se reconcilia....

Faltaría ver cuales son los campos PK y qué índices tienen esas tablas.

Saludos


La franja horaria es GMT +2. Ahora son las 02:28:41.

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