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

Cómo detectar campos repetidos (no tuplas)

Estas en el tema de Cómo detectar campos repetidos (no tuplas) en el foro de PostgreSQL en Foros del Web. Hola! Uso Postgres y tengo una duda con una consulta sql. Tengo esta tabla: ID | Col1 | Col2 | Col3 1 | a | ...
  #1 (permalink)  
Antiguo 27/03/2009, 03:26
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Cómo detectar campos repetidos (no tuplas)

Hola!

Uso Postgres y tengo una duda con una consulta sql. Tengo esta tabla:

ID | Col1 | Col2 | Col3
1 | a | b | c
2 | d | e | f
3 | a | b | g
4 | h | i | j


necesito una consulta que me traiga aquellas tuplas que tengan los campos col1 y col2 iguales, aunque el resto sean distintos.

He intentado con algo así:

select * from tabla as t1 where t1.id in (select * from tabla as t2 where t1.Col1=t2.Col2 and t1.Col2=t2.Col2 and t1.ID != t2.ID)

Pero no me devuelve nada.

¿Alguien sabe cómo se puede hacer esta consulta?

Muchas gracias!
  #2 (permalink)  
Antiguo 27/03/2009, 07:08
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cómo detectar campos repetidos (no tuplas)

Estas muy cerca.

Si es lo que entendí, Puedes hacerlo asi:

Código SQL:
Ver original
  1. SELECT *FROM tabla WHERE col1 IN(SELECT col2 FROM tabla);

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/03/2009, 08:33
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Cómo detectar campos repetidos (no tuplas)

Muchas gracias por la respuesta. Sin embargo, no es eso exactamente lo que quiero hacer. No quiero que col1 sea igual a col2, si no que quiero detectar aquellos casos en los que col1 y col2 se repitan juntos.

ID |COL1 |COL2
1 | A |B
2 |C |D
3 |A |B
4 |A |D

En este ejemplo, necesito que me devuelva las tuplas 1 y 3 porque tanto col1 como col2 son iguales. Sin embargo, no me importa que la tupla 4 coincida en col1 con la tupla 1, porque no lo hace en col2.

no sé si me explico bien...
  #4 (permalink)  
Antiguo 27/03/2009, 10:00
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Cómo detectar campos repetidos (no tuplas)

Con esta select tendrias las primera fila de las repetidas, sacar todas es más complicado, o al menos ahora mismo no caigo en nada sencillo. Pero se puede hacer si hace falta.

Código:
select * from tabla where id in (
select id from tabla
group by col1, col2
having count(*) > 1)
Salu2
  #5 (permalink)  
Antiguo 27/03/2009, 10:09
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Cómo detectar campos repetidos (no tuplas)

Al probar la opción que sugiere seyko, me da error ya que me obliga a poner el ID en la cláusula group by. Al ponerlo, la consulta no devuelve nada.

La verdad es que es más complicado de lo que pensaba...

Muchas gracias de todas maneras!
  #6 (permalink)  
Antiguo 27/03/2009, 10:09
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Cómo detectar campos repetidos (no tuplas)

Me he quedado dandole vueltas y de repente "como no se me ha ocurrido antes?"

Código:
select t1.*
from tabla t1
	join prueba  t2 on t1.col1 = t2.col1 AND t1.col2 = t2.col2 AND t1.id != t2.id
Salu2
  #7 (permalink)  
Antiguo 27/03/2009, 10:17
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Cómo detectar campos repetidos (no tuplas)

Perdona por lo del id, son las malas practicas que estoy adquiriendo en mysql
La segunda te da lo que quieres

Salu2
  #8 (permalink)  
Antiguo 27/03/2009, 10:53
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Cómo detectar campos repetidos (no tuplas)

GENIAL!!!!

Ha funcionado!!!! Muchísimas gracias seyko!! La verdad es que me he pasado UN BUEN RATO dándole vueltas al asunto con anidaciones y cosas complicadas, y resulta que haciendo un inner join consigo mismo ya estaba!!! si esque nos complicamos nosotros solos!!!jajaj

Muchas gracias, de verdad!!

Un saludo!
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 22:20.