Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Consulta JOIN SQL

Estas en el tema de Consulta JOIN SQL en el foro de Bases de Datos General en Foros del Web. Hola, Mi consulta es muy básica pero estoy encontrando inconsistencias al momento de hacerla. Supongamos que tengo 2 tablas: Clientes: id, nombre Compras: id, id_cliente, ...
  #1 (permalink)  
Antiguo 15/03/2016, 16:04
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Consulta JOIN SQL

Hola,

Mi consulta es muy básica pero estoy encontrando inconsistencias al momento de hacerla.

Supongamos que tengo 2 tablas:
Clientes: id, nombre
Compras: id, id_cliente, nombre_cliente, fecha

Como es obvio, el identificador id_cliente de la tabla Compras hace referencia al id de la tabla Clientes.

El objetivo:
Obtener todos los clientes con compras realizadas despues de la fecha '31-12-2011'.

Por lo que mi consulta queda de la siguiente forma:
Código SQL:
Ver original
  1. SELECT Compras.id_cliente AS CODIGO, Clientes.nombre AS NOMBRE, COUNT(Compras.id) AS CantReg
  2. FROM Compras
  3. JOIN Clientes ON Clientes.id = Compras.id_cliente
  4. WHERE Compras.Fecha > '31-12-2011'
  5. GROUP BY Compras.id_cliente, Clientes.NOMBRE
  6. ORDER BY CantReg DESC

El problemas es que al realizar la comparación con una simple consulta dentro de Compras, la cantidad de resultados difieren:
Código SQL:
Ver original
  1. SELECT id_cliente, nombre_cliente, COUNT(ID) AS CantReg
  2. FROM Compras
  3. WHERE Fecha>'31-12-2011'
  4. GROUP BY id_cliente, nombre_cliente ORDER BY CantReg DESC

Quisiera destacar el hecho de que no se si el ingreso de nombre_cliente puede hacerse independientemente del id_cliente al generar el registro (es un sistema viejo y debo migrar la base de datos)

Me interesa saber, en un principio, si la clausula JOIN está bien implementada y cumple con mi objetivo.
Además me gustaría escuchar opiniones de por qué la cantidad de registros devueltos en ambas consultas difieren. Hasta donde ví, para cada id_cliente de la tabla Compras existe un cliente en la tabla Clientes.

Gracias de antemano
  #2 (permalink)  
Antiguo 15/03/2016, 16:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta JOIN SQL

Primero entendamos que en un join estas buscando que los registros existan en ambas tablas, si por ejemplo si tienes 10 clientes registrados pero solo 8 de ellos te han comprado va a haber una diferencia cuando trates de unir las consultas y revisar los datos de cada una de las tablas. Aqui deberias de ver si realmente para cada cliente existe una venta y que pasa cuando el cliente tiene mas de una compra? ahi saldria mas de una vez el cliente o no???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 15/03/2016, 19:19
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Consulta JOIN SQL

Hola Libras, gracias por responder.

La idea es filtrar los clientes activos en los últimos 4 años.
Cada compra pertenece a un unico cliente. Cada cliente puede tener mas de una compra, para cuyo caso debería mostrarse el cliente por única vez (de ahí el GROUP BY id_cliente).

En resumen, de unos 4000 clientes deseo obtener únicamente los datos de aquellos que efectuaron compras a partir del '31-12-2011'. La operación de compra en si no me interesa, sólo el cliente y sus datos.

gracias!

Etiquetas: join, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:20.