SQL - Comparar filas de una misma tabla

 
Vista:
sin imagen de perfil
Val: 10
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Comparar filas de una misma tabla

Publicado por Guillermo (5 intervenciones) el 09/12/2016 13:35:35
Hola, necesito ayuda para realizar la siguiente consulta: Mostrar el DNI los clientes que comparten teléfono.

Tengo una tabla Clientes que tiene, DNI, telefono y otros datos, el problema es que no se como comparar los telefonos de la tabla para sacar los que son iguales entre sí, por favor ayudenme
Captura-de-pantalla-2016-12-09-13.34.47
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
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Comparar filas de una misma tabla

Publicado por leonardo_josue (1173 intervenciones) el 09/12/2016 17:29:41
Hola Guillermo:

¿Qué es lo que haz intentado hacer? Porque puedo suponer que haz intentado hacer algo. Esta es una consulta básica en SQL y por lo que veo se trata de una tarea escolar.

El problema básicamente se divide en dos pasos:

1. Determinar qué teléfonos están registrados más de una vez en tu tabla de clientes (esto quiere decir que el teléfono está compartido por más de un cliente). Esto lo logras utilizando la función de agrupación COUNT, y las cláusulas GROUP BY y HAVING.

2. Filtrar, de todos los clientes, aquellos que tengan alguno de los teléfono que aparecen en la consulta del paso 1. Tienes muchas formas de hacerlo... con IN, con EXISTS o con LEFT o RIGTH JOIN incluso con simples subconsultas...

haz la prueba y nos comentas. Si continuas con problemas postea la consulta que intentaste hacer y con gusto te ayudamos a corregir o complementar lo que falte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 10
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Comparar filas de una misma tabla

Publicado por Guillermo (5 intervenciones) el 09/12/2016 23:40:38
Hola, si es una tarea escolar, pero no nos han explicado casi nada, y lo hago mirando los apuntes que nos han puesto, he intentado un montón de cosas y finalmente he puesto lo siguiente: SELECT DNI FROM CLIENTES NATURAL JOIN (SELECT DNI "DNI1", TELEFONO "TELEFONOS" FROM CLIENTES) WHERE NOT DNI = DNI1 AND TELEFONO = TELEFONOS;

He introducido un nuevo caso en la tabla, he copiado los datos del primer usuario y solo he cambiado el DNI para que coincidieran los teléfonos y me ha mostrado a los dos que comparten teléfono, tiene sentido la consulta?

Lo he hecho también como creo que decís, y también funciona, es correcta la siguiente instrucción? : SELECT DNI FROM CLIENTES NATURAL JOIN (SELECT DISTINCT TELEFONO "TELEFONO_AUX", COUNT(TELEFONO) FROM CLIENTES GROUP BY TELEFONO HAVING COUNT(TELEFONO) >= 2) WHERE TELEFONO = TELEFONO_AUX;
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Comparar filas de una misma tabla

Publicado por leonardo_josue (1173 intervenciones) el 12/12/2016 15:51:16
Hola de nuevo Guillermo:

Esa es una de las formas en las que se llega al resultado que esperas, de hecho es la consulta a la que esperaba que pudieras llegar sin ayuda. Felicidades!!!

Como te comenté, podrías haber utilizado también IN o EXISTS más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT dni
FROM CLIENTES
WHERE telefono IN ( SELECT telefono
                    FROM CLIENTES
                    GROUP BY telefono
                    HAVING COUNT(telefono) >= 2 )
 
SELECT dni
FROM CLIENTES C1
WHERE EXISTS ( SELECT telefono
               FROM CLIENTES C2
               WHERE C1.dni = C2.dni
               GROUP BY telefono
               HAVING COUNT(C2.telefono) >= 2 )

Sin embargo, el utilizar JOIN's como tú lo hiciste suele ser la manera más óptima de hacerlo, (ya que EXISTS tiene peor rendimiento que el JOIN y el IN tiene el peor rendimiento de todos)

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Comparar filas de una misma tabla

Publicado por Pepa (1 intervención) el 05/10/2018 10:19:54
Hola tengo otra cuestión,

Cómo debería modificar ese programa si, además de seleccionar los clientes que tengan el mismo número de teléfono también deseo que tengan distinto nombre.
Osea me quiero quedar con el DNI de los clientes que tienen el mismo número de teléfono y distinto nombre. Entiendo que habría que meter una nueva condición en el having pero no sé bien cómo.

Muchas gracias de antemano!
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

Comparar filas de una misma tabla

Publicado por francisco (1 intervención) el 14/11/2018 13:10:43
Hola, estoy empezando con SQL pero hay una cosa que no entiendo, cuando haces el from Tabla C1 -> me podrías por favor explicar que haces aquí osea, ya se que con el from Tabla, obtienes los datos de Tabla, pero he probado el código y funciona, y tanto C! como C2 he de suponer que son tablas pero no las tengo creadas....

Podrías orientarme en el funcionamiento del código!!


Gracias
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Comparar filas de una misma tabla

Publicado por Isaias (1921 intervenciones) el 09/12/2016 18:34:50
Leonardo tiene mucha razon, son "Manejo de conjuntos"

SQL Server tiene una herramienta que se llama DQS (Data Quality Service), que entre otras cosas, puede hacer "data matching", que en tu caso serviria para ver que registros "se parecen" mucho, en base a un modelo de comparacion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Comparar filas de una misma tabla

Publicado por Fran (1 intervención) el 08/04/2020 23:20:29
Hola. Estoy con una query q desea de una misma tabla extraer los datos siguientes:

Hay episodios de pacientes q tienen típoconcepto informe o típoconcepto formulario, entre otros.

Como puedo sacar los que tienen ese campo como formulario pero no tienen informe??
Es decir un mismo episodio se repite si tiene informe y formulario, pero la idea es sacar los q tienen formulario y no informe

Muchas gracias
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