Lo solucioné, ¿pero por qué?

30/07/2003 - 02:48 por Julio C. Briceño R. | Informe spam
Saludos,

Amigos tengo un típico recibo que tiene los datos
genéricos del recibo (los que salen una vez como fecha del
recibo, número de recibo, etc), tengo además los conceptos
de los recibos que pueden ser 1 o más, y los depósitos con
lo que se canceló el monto total del recibo que también
pueden ser uno o más, ahora, ¿qué pasaba?

Hacía una consulta con la que buscaba los datos de los
depósitos, asociados a un recibo.

select x from depositos inner join recibos on
recibos.numerorecibo = depositos.numerorecibo where
numerorecibo = XXX

, y otra consulta con la que buscaba los detalles

select x from conceptos inner join recibos on
recibos.numerorecibo = conceptos.numerorecibo where
numreorecibo = XXX

, ahora los depósitos me los traía en el mismo orden que
los guardé, es decir si primero se colocó el depósito del
banco YY cuenta RR ese era el primer registro que me
traía, pero con los conceptos no pasaba eso, me los traía
en el orden del código de concepto. Por ejemplo, si yo
guaradaba:

Código Descripcion
44 Pago Inicial
12 Derecho de inscripción

, me devolvía

12 Derecho...
44 Pago

¿Por qué? Las combinaciones con la tabla recibo son
iguales tanto para con depósitos como con conceptos,
además no tengo como campo clave el código del tipo de
concepto en la tabla de conceptos.

Bueno lo cierto es que como no tengo campo con el cual
pueda ordenar con un group by, decidí darle vueltas a los
tipos de combinación de SQL SERVER y encontré que uno
puede cambiar la forma (u obligar a SQL SERVER 2000) a
utilizar algo y no otra cosa que el considera adecuada,
así dí con que existen HASH, MERGE y LOOP como formas de
combinación de dos tablas, así que (desafiando los libros
en pantalla de SQL Server 2000 que te asustan con eso de
¡ESTO ES PARA ADMINISTRADORES O USUARIOS AVANZADOS! decidí
obligar a SQL SERVER 2000 al colocarle:

select x from conceptos inner (((LOOP))) join recibos on
recibos.numerorecibo = conceptos.numerorecibo where
numreorecibo = XXX

y todo funcionó bien, ahora el orden es el original

y eso fue la solución, ahora SQL SERVER no documenta bien
eso, pero ¿habrá un gran y amigable administrador que
pueda explicarme por qué el HASH (que creo que es el que
utilizaba) me devolvía la cuestión como quería?

No me preocupo por el rendimiento, son unas cincuenta
milésimas de segundos más que tarda la consulta (nada
visible para un usuario normal)

Bien si alguien llegó hasta aquí, gracias y agradezco sus
comentarios.

Julio C. Briceño R.
Caracas, Venezuela
Analista de Sistemas
 

Leer las respuestas

#1 Antonio Ortiz
30/07/2003 - 03:02 | Informe spam
Te functiona la consulta?
select x from conceptos inner join recibos on
recibos.numerorecibo = conceptos.numerorecibo where
numreorecibo = XXX

Tienes un campo duplicado, deberia ser:
select x from conceptos inner join recibos on
recibos.numerorecibo = conceptos.numerorecibo where
RECIBOS.numreorecibo = XXX

Saludos,

Antonio Ortiz Ramirez
asesor en sistemas

www.aortiz.net




"Julio C. Briceño R." escribió en el mensaje
news:07de01c35634$4f821880$
Saludos,

Amigos tengo un típico recibo que tiene los datos
genéricos del recibo (los que salen una vez como fecha del
recibo, número de recibo, etc), tengo además los conceptos
de los recibos que pueden ser 1 o más, y los depósitos con
lo que se canceló el monto total del recibo que también
pueden ser uno o más, ahora, ¿qué pasaba?

Hacía una consulta con la que buscaba los datos de los
depósitos, asociados a un recibo.

select x from depositos inner join recibos on
recibos.numerorecibo = depositos.numerorecibo where
numerorecibo = XXX

, y otra consulta con la que buscaba los detalles

select x from conceptos inner join recibos on
recibos.numerorecibo = conceptos.numerorecibo where
numreorecibo = XXX

, ahora los depósitos me los traía en el mismo orden que
los guardé, es decir si primero se colocó el depósito del
banco YY cuenta RR ese era el primer registro que me
traía, pero con los conceptos no pasaba eso, me los traía
en el orden del código de concepto. Por ejemplo, si yo
guaradaba:

Código Descripcion
44 Pago Inicial
12 Derecho de inscripción

, me devolvía

12 Derecho...
44 Pago

¿Por qué? Las combinaciones con la tabla recibo son
iguales tanto para con depósitos como con conceptos,
además no tengo como campo clave el código del tipo de
concepto en la tabla de conceptos.

Bueno lo cierto es que como no tengo campo con el cual
pueda ordenar con un group by, decidí darle vueltas a los
tipos de combinación de SQL SERVER y encontré que uno
puede cambiar la forma (u obligar a SQL SERVER 2000) a
utilizar algo y no otra cosa que el considera adecuada,
así dí con que existen HASH, MERGE y LOOP como formas de
combinación de dos tablas, así que (desafiando los libros
en pantalla de SQL Server 2000 que te asustan con eso de
¡ESTO ES PARA ADMINISTRADORES O USUARIOS AVANZADOS! decidí
obligar a SQL SERVER 2000 al colocarle:

select x from conceptos inner (((LOOP))) join recibos on
recibos.numerorecibo = conceptos.numerorecibo where
numreorecibo = XXX

y todo funcionó bien, ahora el orden es el original

y eso fue la solución, ahora SQL SERVER no documenta bien
eso, pero ¿habrá un gran y amigable administrador que
pueda explicarme por qué el HASH (que creo que es el que
utilizaba) me devolvía la cuestión como quería?

No me preocupo por el rendimiento, son unas cincuenta
milésimas de segundos más que tarda la consulta (nada
visible para un usuario normal)

Bien si alguien llegó hasta aquí, gracias y agradezco sus
comentarios.

Julio C. Briceño R.
Caracas, Venezuela
Analista de Sistemas

Preguntas similares