PDA

Ver la Versión Completa : Ayuda con consulta SQL


mordaz
03-06-2014, 06:14:56
Que tal,

Alguien me puede ayudar a optimizar esta consulta:


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


TABLE "MOVIMIENTOS_MESAS"
(
"MOV_MESA_KEY" INTEGER NOT NULL,
"CORTE" INTEGER,
"CANCELADO" CHAR(1),
PRIMARY KEY ("MOV_MESA_KEY")
);



TABLE "RESTAURANTE_CONCEPTOS"
(
"MOV_MESA_KEY" INTEGER NOT NULL,
"ORDEN" INTEGER NOT NULL,
"CODIGO" VARCHAR(25) NOT NULL,
"CANTIDAD" INTEGER,
"PRECIO" FLOAT,
"IMPORTE" FLOAT,
);



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
Alguien me puede ayudar a optimizar esta consulta:
Sí, alguien puede ayudarte en... ¿optimizar qué?

mordaz
03-06-2014, 19:22:18
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
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:
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