Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta doble (https://www.clubdelphi.com/foros/showthread.php?t=5602)

NickName 26-11-2003 20:11:32

Consulta doble
 
Hola.

Tengo una consulta que me regresa los datos que quiero pero doble o 2 veces la misma cosa y no entiendo por que, si alguien me puede decir que estoy haciendo mal.......
Código:

select  IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from    ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Resto <> 0 And EncabezadoNota.Cliente = :NombreCliente
            And  CLientes.Debe = 'SI'

Gracias...


Saludos.

roman 26-11-2003 20:38:43

Estás tomando datos de dos tablas. Debe haber alguna condición que relacione ambas.

// Saludos

NickName 28-11-2003 18:38:46

Hola.

Mi tabal EncabezadoFac en su propiedad DataSource es igual a DatasourceClientes......

Donde podria poner o como pondria la condición que dices????

si me pueden ayudar se los agradeceria mucho...

Saludos.:confused:

delphi.com.ar 28-11-2003 19:32:32

Ejemplo:

Código:

SELECT  ...
FROM ENCABEZADONOTA, CLIENTES
WHERE ENCABEZADONOTA.CLIENTE = CLIENTES.ID


NickName 28-11-2003 20:31:43

Hola.

he cambiado el codigo de la consulta como muestro a continuación:
Código:


select  IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from    ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = Clientes.NombreCliente And Clientes.Debe = 'SI' And  EncabezadoNota.Resto > 0

Con este codigo me muestra las notas que debe el cliente seleccionado y tambien las que no le pertenecen...

La consulta busca en la tabla de notas las notas que adeuda un cliente que pueden ser una o mas de una y solo las notas que haun no se an terminado de pagar..

saludos..

NickName 28-11-2003 20:54:54

Hola.

Con este codigo me muestra nadamas las notas que le pertenecen al cliente seleccionado pero las muestra 2 veces, no entiendo que pasa.... No se porque me muestra el mismo registro dos veces.

Código:


select  IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from    ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = :NombreCliente
            And  CLientes.Debe = 'SI' And EncabezadoNota.Resto > 0

y el codigo que puse en el Post anterior me muestra todas las notas que no se han pagado hasta las que no le pertenecen al cliente seleccionado.

Saludos..

delphi.com.ar 28-11-2003 21:28:32

Si no relacionas las tablas, el resultado será un registro por cada registro de cada tabla nombrada en el FROM, con lo que obtendrás el producto cartesiano de las cantidades de registros.
Por otro lado, no es recomendable en un esquema entidad-relación relacionar tablas por datos descriptivos, sino que es conveniente tener un campo identificador de registro.

Saludos!

NickName 29-11-2003 03:20:30

Hola.


Cita:


Si no relacionas las tablas, el resultado será un registro por cada registro de cada tabla nombrada en el FROM

Las tablas si estan relacionadas y la verdad no logro entender el porque me manda 2 veces el mismo registro....

Saludos.

NickName 29-11-2003 04:06:09

Hola.

Problema Solucionado:

La verdad nunca me habia susedido esto pero en fin tratare de explicar la solución.

Mi tabla o consulta que tenia el siguiente codigo Sql
Código:


select  IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from    ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = :NombreCliente And EncabezadoNota.Resto > 0  And  Clientes.Debe = 'SI'

en su propiedad DataSource le Asignaba el DataSource de la tabla de clientes para comparar asi el cliente seleccionado con la tabla de las notas en:
Código:


Where EncabezadoNota.Cliente = :NombreCliente

Despues se comparava lo que faltaba de pagarse con la nota y si el cliente adeuda..... bueno el codigo anterior me mostraba las notas que adeudaba el cliente seleccionado pero 2 veces el mismo registro.... y esto se soluciono asi:
Código:


select  IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from    ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = :NombreCliente And EncabezadoNota.Resto > 0  And  Clientes.Debe = 'SI' And


EncabezadoNota.Cliente = Clientes.NombreCliente

Agregando la ultima linea muestra las notas pero como debe de ser, sigo sin entender por que me mostraba 2 veces el mismo registro y la verdad el codigo de la consulta no se ve bien y ciento que no es lo correcto pero funciona.....espero y aya explicado bien la solución......

Gracias por la ayuda recibida...... GRACIAS.

Saludos...

Héctor

delphi.com.ar 01-12-2003 15:28:20

Cita:

NickName comentó:
Las tablas si estan relacionadas y la verdad no logro entender el porque me manda 2 veces el mismo registro....
Tienes que relacionarlas en la consulta... No tomes a mal lo que te digo, pero te recomiendo buscar un poco de información sobre SQL, pues esto es un concepto más que básico...

Saludos!

NickName 01-12-2003 18:38:58

Hola.

Cita:

delphi.com.ar Comento:

No tomes a mal lo que te digo, pero te recomiendo buscar un poco de información sobre SQL.

No te preocupes, no me molesta ninguna recomendación de ese tipo, al contrario te agradesco que lo hagas por que para mi es una forma de saber que me falta mucho por aprender......


Por otro lado, cuando encontre un libro sobre Sql en la libreria se agotaron solo pude ver como otra persona tomaba el ultimo que quedaba...... si me puedes recomendar algun sitio donde encontrar algo te lo agradeceria mucho.......

Saludos..

Héctor.

NickName 01-12-2003 18:56:47

Hola.

Cita:

Comento delphi.com.ar:


Tienes que relacionarlas en la consulta...


segun yo en esta parte de la consulta relaciono las tablas
Código:

Where EncabezadoNota.Cliente = Clientes.NombreCliente
La relación la hago es atravez del nombre del cliente que existe en la nota y pues tambien en la tabla de Clientes.

Crees que este bien... o es correcto...????

Saludos...

delphi.com.ar 01-12-2003 19:47:10

Cita:

NickName comentó:
La relación la hago es atravez del nombre del cliente que existe en la nota y pues tambien en la tabla de Clientes.

Crees que este bien... o es correcto...????
La respuesta está en esto que te escribí anteriormente:
Cita:

Delphi.com.ar comentó:
...no es recomendable en un esquema entidad-relación relacionar tablas por datos descriptivos, sino que es conveniente tener un campo identificador de registro.
Saludos!

roman 01-12-2003 20:10:35

Cita:

delphi.com.ar meta comentó:
...no es recomendable en un esquema entidad-relación relacionar tablas por datos descriptivos, sino que es conveniente tener un campo identificador de registro.

Traducción (creo): Conviene usar como llaves de tablas campos que no signifiquen nada en la vida real ya que cualquier dato de esta naturaleza es susceptible de cambiar lo que implicaría cambios en todas las tablas que usen dichos campos para relacionarse.

No necesariamente esto significa que una persona va a cambiar de nombre pero si se introduce un nombre de manera equivocada pues ya tienes que arreglar muchos puntos de tu base.

Además de esto, yo añadiría que de preferencia no se usen campos de texto para formar relaciones ya que se hacen muy lentos los sistemas, sobre todo con un campo como el nombre de una persona. Toma en cuenta que cada vez que requieras una relación, el manejador de bases de datos tiene que comparar cadenas de caracteres que pueden girar alrededor de 50 caracteres. Esta es una comparación muy costosa en tiempo.

Lo ideal es proveer una llave "artificial" como un campo autoincremental. Dicho campo sería conocido sólo por el manejador de bases de datos dejando el resto de campos en libertad de ser editados sin preocupaciones.

// Saludos


La franja horaria es GMT +2. Ahora son las 02:04:43.

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