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

Consulta de datos iguales

Estas en el tema de Consulta de datos iguales en el foro de Bases de Datos General en Foros del Web. Hola, quiero hacer una consulta pero no se me ocurre como, tengo lo siguiente: 2 Campos: idtexto y texto con los sgtes datos: 1 a ...
  #1 (permalink)  
Antiguo 20/07/2011, 04:32
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Consulta de datos iguales

Hola, quiero hacer una consulta pero no se me ocurre como, tengo lo siguiente:

2 Campos: idtexto y texto con los sgtes datos:

1 a
2 b
3 c
4 a
5 d
6 c
7 e

Entonces la consulta kiero que me saque que el texto repetido es el a y el c, como podria hacerlo?

Gracias
  #2 (permalink)  
Antiguo 20/07/2011, 04:36
Avatar de wsoul  
Fecha de Ingreso: octubre-2010
Mensajes: 190
Antigüedad: 14 años, 1 mes
Puntos: 13
Respuesta: Consulta de datos iguales

sería con count, esto es un ejemplo

SELECT COUNT(texto) AS ctexto FROM NOMBRETABLA WHERE ctexto>1
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #3 (permalink)  
Antiguo 20/07/2011, 04:39
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Consulta de datos iguales

Hola he hecho lo siguiente :

select distinct texto from textos where idioma=1
me devuelve: 2810 datos

select distinct texto from textos where idioma=1

me devuelve: 2768 datos

Es decir que hay 42 repetidos, pero como puedo hacer una consulta para que me diga cuales son repetidos, no la cantidad de repetidos

Saludos
  #4 (permalink)  
Antiguo 20/07/2011, 04:46
Avatar de wsoul  
Fecha de Ingreso: octubre-2010
Mensajes: 190
Antigüedad: 14 años, 1 mes
Puntos: 13
Respuesta: Consulta de datos iguales

mmm, xke no me dices si lo que te dije te funciono ?
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #5 (permalink)  
Antiguo 20/07/2011, 04:51
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Consulta de datos iguales

Cita:
Iniciado por wsoul Ver Mensaje
mmm, xke no me dices si lo que te dije te funciono ?

me salta un error al lanzar esta consulta en oracle:

SELECT COUNT(texto) AS ctexto FROM textos WHERE ctexto>1 and idioma=1

error:
Error SQL: ORA-00904: "CTEXTO": identificador no válido
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:

Saludos y gracias
  #6 (permalink)  
Antiguo 20/07/2011, 04:59
Avatar de wsoul  
Fecha de Ingreso: octubre-2010
Mensajes: 190
Antigüedad: 14 años, 1 mes
Puntos: 13
Respuesta: Consulta de datos iguales

SELECT count(texto) AS ctxt,texto FROM a GROUP BY texto

así te dice cuatnas veces se repiten
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #7 (permalink)  
Antiguo 20/07/2011, 05:05
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Consulta de datos iguales

Hola de nuevo, garcias por tu respuesta: tu consulta me saca los mismos datos que si hago
select distinct texto from texto

pero no quiero que me elimine los textos sino solo quiero que la consulta me saque que textos son los repetidos, es decir :
1 a
2 b
3 c
4 a
5 d
6 c
7 e

me diga:a,c (solo que me diga que textos son los repetidos)
con tu consulta me saca: a,b,c,d,e (5 datos y no 7 si hiciero un select * from textos)
no se si me explico


PD: Tu consulta esta bien porque me dice ese texto cuantas veces se repiten pero al mirar uno por uno con miles de datos que tengo :(
Saludis

Última edición por sirdaiz; 20/07/2011 a las 05:12
  #8 (permalink)  
Antiguo 20/07/2011, 11:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Consulta de datos iguales

Hola sirdaiz:

No sé si entendí correctamente cómo quieres la salida, pero podrías hacer esto:

Código:
SELECT texto, count(*) total 
FROM textos 
GROUP BY texto HAVING count(*) > 1
Es básicamente la idea que pone wsoul, pero hay que recordar que no se pueden utilizar campos calculados en WHERE, sino que se ponen en el HAVING... aquí te debería regresar algo como esto:

Código:
texto total
----- -----------
a     2
c     2
es decir, qué textos están repetidos y cuantas veces están repetidos

Saludos
Leo.
  #9 (permalink)  
Antiguo 21/07/2011, 01:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Consulta de datos iguales

Vale perfecto, una ultima cosita, y si quiero que me diga solo, teniendo 3 campos mi tabla
id,texto me diga
1 a
2 b
3 c
4 a
5 d
6 c
7 e

quiero que me devuelva solo los repetido con su respectivo id, es decir:

1 a
4 a
3 c
6 c

Saludos
  #10 (permalink)  
Antiguo 21/07/2011, 08:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Consulta de datos iguales

Esa es una consulta muy diferente a la que planteas al principio, utilizarías la consulta que puse para filtrar los datos, mediante un INNER JOIN, sería más o menos así:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE duplicados (id INT, texto VARCHAR(1));
  2. Query OK, 0 rows affected (0.12 sec)
  3.  
  4. mysql> INSERT INTO duplicados VALUES (1, 'a'),(2, 'b'),
  5.     -> (3, 'c'),(4, 'a'),(5, 'd'),(6, 'c'),(7, 'e');
  6. Query OK, 7 rows affected (0.10 sec)
  7. Records: 7  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM duplicados;
  10. +------+-------+
  11. | id   | texto |
  12. +------+-------+
  13. |    1 | a     |
  14. |    2 | b     |
  15. |    3 | c     |
  16. |    4 | a     |
  17. |    5 | d     |
  18. |    6 | c     |
  19. |    7 | e     |
  20. +------+-------+
  21. 7 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT T1.* FROM duplicados T1 INNER JOIN
  24.     -> (
  25.     -> SELECT texto FROM duplicados GROUP BY texto HAVING COUNT(texto) > 1
  26.     -> ) T2 ON T1.texto = T2.texto ORDER BY texto, id;
  27. +------+-------+
  28. | id   | texto |
  29. +------+-------+
  30. |    1 | a     |
  31. |    4 | a     |
  32. |    3 | c     |
  33. |    6 | c     |
  34. +------+-------+
  35. 4 rows in set (0.00 sec)

El ejemplo está hecho en MySQL, pero utiliza código estándar, por lo que no deberías tener problemas para ejecutarlo en ORACLE,

Saludos
Leo.
  #11 (permalink)  
Antiguo 21/07/2011, 09:14
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Consulta de datos iguales

Hola Leo, me sale este error:

SELECT T1.* FROM textos T1 INNER JOIN(
SELECT texto FROM textos GROUP BY texto HAVING COUNT(texto) > 1 ) T2 ON T1.texto = T2.texto ORDER BY texto
Error en la línea de comandos:2 Columna:114
Informe de error:
Error SQL: ORA-00918: columna definida de forma ambigua
00918. 00000 - "column ambiguously defined"
*Cause:
*Action:
  #12 (permalink)  
Antiguo 21/07/2011, 10:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Consulta de datos iguales

Hola de nuevo sirdaiz:

El error es bastante claro, creo yo, pero lo que me resulta incomprensible es que no lo hayas podido corregir por tu cuenta, es más, pensaría que ni siguiera hiciste el esfuerzo por ver de qué se trataba y por lo tanto poder corregirlo.

el campo TEXTO existe tanto en la tabla T1 como en la tabla T2, por lo tanto es necesario que en cuando hagas referencia a este campo especifiques a cual de las dos tablas pertenece, en el select interno no hay problema, pues está aislado del resto. Solo hay un campo TEXTO sin referencia de tabla, al final de la consulta.

Compañer@ sirdaiz, lamento tener que decir que no puedes esperar que con solo copiar y pegar se resuelvan tus problemas, generalmente lo que aquí se pone son guías, por lo que es posible que sea necesario que tengas que hacer algún tipo de adecuación al código, puedes acudir a GOOGLE o a cualquier otro buscador, un buen manual de SQL para principiantes también serviría o incluso la propia documentación de ORACLE te puede ayudar a resolver la mayoría de tus problema. Ojo para la próxima

Saludos
Leo.
  #13 (permalink)  
Antiguo 22/07/2011, 01:26
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Consulta de datos iguales

Hola Leo, gracias por tu sugerencia y por tu solucion, es que nunca habia hecho esto de inner join sabia que existia pero no sabia usarlo, bueno esta mañana acabo de meditar lo que me has dicho y funciona:

Código HTML:
Ver original
  1. SELECT T1.* FROM textos T1 INNER JOIN(
  2. SELECT texto FROM textos where idioma=3 GROUP BY texto HAVING COUNT(texto) > 1 ) T2 ON T1.texto = T2.texto
  3. ORDER BY t1.texto

Gracias por vuestar ayuda, ahi os deja un karma,Ojo para la proxima Leo no seas tan cruel conmigo xD

Saludos
  #14 (permalink)  
Antiguo 22/07/2011, 08:10
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Consulta de datos iguales

Hola de nuevo sirdaiz, mi intención con el comentario nunca fue la de ser cruel sino tratar de hacerte notar que no estabas haciendo del todo bien tu trabajo... si así lo sentiste te ofrezco una disculpa...

Si eres novato en estas cuestiones, tienes entonces un mundo por aprender, este tipo de consultas son de las más sencillas, sobre todo si estás trabajando con ORACLE. Este es uno de los DBMS más robustos del mercado lo que te permite tener funcionalidades que ningún otro DBMS tiene. El grado de complejidad de las consultas que puedes armar en ORACLE no se compara en nada con el ejemplo que aquí hicimos.

Te recomiendo que comiences por leer cualquier manual de SQL para principiantes y que después de dediques a explorar la documentación propia de ORACLE, para que puedas darte una idea de todo su potencial.

Saludos
Leo.

Etiquetas: iguales, bases-de-datos
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 14:30.