SQL - RIGHT JOIN

 
Vista:

RIGHT JOIN

Publicado por JL (1 intervención) el 10/11/2005 11:01:26
Hola, a ver si alguien me puede ayudar con esto:

Tengo dos tablas que comparten un campo común. Los valores de ese campo pueden aparecen varias veces en ambas tablas. Quiero que una consulta me dé el número de veces que se repiten valores de ese campo en la tabla 1 y, para los valores que no se repiten, los que aparecen en la tabla 2( también quiero ver para los valores que se repiten en la tabla 1, si aparecen, y cuantas veces, en la tabla 2). HE relacionado las dos tablas, con una relación uno a varios ( supongo que aquí está el problema), siendo la de la derecha ( según la terminología access) la tabla 1. La siguiente consulta me da "casi" lo que quiero:

SELECT Tablaprueba1.NUMCLIENTE, Count(Tablaprueba1.numcliente) AS cuenta1, Count (Tablaprueba2.numero) AS cuenta2, (Count(Tablaprueba1.numcliente)+ Count (Tablaprueba2.numero)) AS total
FROM Tablaprueba2 RIGHT JOIN Tablaprueba1 ON Tablaprueba2.numero = Tablaprueba1.numcliente
GROUP BY Tablaprueba1.numcliente
HAVING (((Count(Tablaprueba1.numcliente))>1) OR ((Count(Tablaprueba1.numcliente)+ Count (Tablaprueba2.numero))>1));

El problema es que en cuenta2 no me da el resultado esperado : para aquellos valores que aparecen en tabla 1 y tabla 2, cuenta2 me da lo mismo que cuenta1.

¿Alguna sugerencia?

GRacias y un saludo.

JL
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:RIGHT JOIN

Publicado por Liliana (426 intervenciones) el 10/11/2005 13:21:47
Hola,
Mi respuesta es válida para tablas MS SQL, no sé cuál es el comportamiento en una base Access, pero a lo mejor sirve para darte una idea.
El problema está en la combinación de tablas con claves repetidas. Si hacés un simple
SELECT NumCliente, Numero
FROM Tablaprueba2
RIGHT JOIN Tablaprueba1
ON Numcliente = Numero
verás que aunque se multiplican las filas de resultado.

Esto funciona, como te dije, para SQL Server:

SELECT NumCliente,
Cuenta1,
Cuenta2,
Cuenta1 + Cuenta2 AS Total
FROM
(SELECT numero, cuenta2 = COUNT(numero) FROM Tablaprueba2 GROUP BY numero) t2
RIGHT JOIN
(SELECT numcliente, cuenta1 = COUNT(numcliente) FROM Tablaprueba1 GROUP BY numcliente) t1
ON T2.numero = T1.numcliente
WHERE
cuenta1 > 1 OR cuenta1 + cuenta2 > 1

Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar