PDA

Ver la Versión Completa : no repetir campos


ebeltete
20-05-2003, 07:26:56
tengo 7 tablas una para cada dia de la semana (lunes.db, martes.db....) hacen referencia otras dos tablas (titu.db, clientes.db), mi pregunta es la siguiente:
un registro de la tabla titu puede estar mas de una vez en cualquiera de las tablas de los dias y puede estar en mas de un dia, cuando yo hago una consulta como esta
select titu.codigo, titu.nombre, clientes.razonsoc, titu.fechafin
from "titu.db" titu, "clientes.db" cliente, "lunes.db" lunes, "martes.db" martes, "miercoles.....
where cliente.codigo= titu.cliente and titu.codigo=lunes.codigo and titu.codigo=martes.codigo....

el tema es que quiero que el resultado no me repita los registros mas de una vez, algo asi como que el campo codigo del query sea el campo clave, pues de esta forma me aparece un titulo tantas veces como la suma de las veces que esta en cada tabla, no se si queda claro, uso tbls paradox 7

marcoszorrilla
20-05-2003, 07:50:33
Creo que tendrías plantearte guardarlo todo en una tabla y tener un campo que identifique el día de la semana.

por ejemplo un número del 1 al 7

Un Saludo.

ebeltete
22-05-2003, 01:12:04
Creo que no me entiendes, un mismo titulo puede estar mas de una vez en una tabla dia y en mas de un dia, por ejemplo:
un item con el nombre 'la sombra', puede estar
8 veces en tabla lunes
4 veces en tabla martes
2 veces en tabla miercoles
6 veces en tabla jueves
1 veces en tabla viernes
3 veces en tabla sabado

con la consulta Sql , obtengo una tabla donde el item 'la sombra', me aparece 24 veces, o sea la suma de veces que aparece en cada tabla, yo quiero que simplemente me aparezca una sola vez, espero haber aclarado

__cadetill
22-05-2003, 01:22:27
entonces te falta un

GRoup By titu.codigo, titu.nombre, clientes.razonsoc, titu.fechafin

al final de tu sentencia SQL
De todas formas, la idea de Marcos la veo muy buena. Miratelo a ver

ebeltete
22-05-2003, 01:59:58
con group by logro mi cometido, pero solo puedo hacerla funcionar correctamente con 3 tablas de dias, cuando lo hago con las 7 tablas de los 7 dias de la semana demora una eternidad en darme el resultado, es posible hacerlo de una forma que tarde menos en devolver el resultado?

ebeltete
22-05-2003, 04:32:53
Gracias por tu ayuda, encontre la forma de obtener el resultado que busco.
Ahora, siendo que siempre trabaje con el componente ttable mi pregunta es:
Por qué generalmente me es mas lento una consulta sql con un tquery que recorrer todos los registros de un ttable con un loop para buscar mis resultados?
en esta consulta, con sql tarda 9 segundos mientras que recorrer todos los registros de las 7 tablas de los dias demora tan solo 4 segundos????
Cuales son las ventajas de sql para optar por el tquery????
He leido algo sobre esto y en varios tutoriales encontre que trabajar como yo he trabajado hasta ahora no es lo "ideal" y que es mejor el tquery, yo uso tablas paradox, tal vez no sean las mejores?, me gustaria un consejo de tu parte y alguna información de que seria lo "ideal" para futuros trabajos. No soy un experto en programacion pero es mi hobbie y estoy tratando de perfeccionarme para poder comenzar a comercializar mis aplicaciones, desde ya muchas gracias un abrazo.
P.D. te ecribo el codigo de la sql con que logre mi objetivo:

select titu.nombre, clientes.razonsoc, titu.fechafin
from "lunes.db" lunes
left join "titu.db" titu on titu.codigo=lunes.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha
union
select titu.nombre, clientes.razonsoc, titu.fechafin
from "martes.db" martes
left join "titu.db" titu on titu.codigo=martes.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha
union
select titu.nombre, clientes.razonsoc, titu.fechafin
from "miercole.db" miercoles
left join "titu.db" titu on titu.codigo=miercoles.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha
union
select titu.nombre, clientes.razonsoc, titu.fechafin
from "jueves.db" jueves
left join "titu.db" titu on titu.codigo=jueves.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha
union
select titu.nombre, clientes.razonsoc, titu.fechafin
from "viernes.db" viernes
left join "titu.db" titu on titu.codigo=viernes.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha
union
select titu.nombre, clientes.razonsoc, titu.fechafin
from "sabado.db" sabado
left join "titu.db" titu on titu.codigo=sabado.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha
union
select titu.nombre, clientes.razonsoc, titu.fechafin
from "domingo.db" domingo
left join "titu.db" titu on titu.codigo=domingo.codigo
left join "clientes.db" clientes on titu.cliente=clientes.codigo
where titu.fechafin< :fecha

group By titu.codigo, titu.nombre, clientes.razonsoc, titu.fechafin
order by titu.fechafin