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

Evitar repeticiones en tablas.

Estas en el tema de Evitar repeticiones en tablas. en el foro de Oracle en Foros del Web. Mi pregunta es simple. ¿Como puedo evitar algo como esto? NOMBRE ANTIGUEDAD_P1 NOMBRE ANTIGUEDAD_P2 ----------- ---------------------- ----------- ----------------------- Juana 3 Miguel 4 Miguel 4 Juana ...
  #1 (permalink)  
Antiguo 10/08/2013, 10:06
 
Fecha de Ingreso: agosto-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Evitar repeticiones en tablas.

Mi pregunta es simple.

¿Como puedo evitar algo como esto?

NOMBRE ANTIGUEDAD_P1 NOMBRE ANTIGUEDAD_P2
----------- ---------------------- ----------- -----------------------
Juana 3 Miguel 4
Miguel 4 Juana 3

Es el mismo resultado, pero a la inversa. (No se observa muy bien, lo siento :( )

Detalles sobre cada columna:

Los nombres están normal, la antiguedad es un TRUNC(months_between(sysdate, p1.antiguedad)/12) y TRUNC(months_between(sysdate, p2.antiguedad)/12)

Pero creo explicar también el where que uso es innecesario, ya que consta solamente de no repetir esos dos y que solamente salga uno.

Gracias de antemano.
  #2 (permalink)  
Antiguo 10/08/2013, 10:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Evitar repeticiones en tablas.

Cita:
Es el mismo resultado, pero a la inversa. (No se observa muy bien, lo siento :( )
Eso no se considera repeticiones desde el punto de vista de datos, porque cada valor corresponde a diferentes columnas.
Un registro se repite cuando todos los valores se repinten en todas las columnas entre dos o más registros, y no es el caso.
Ahora bien, si quieres evitar esa condición, es posible, pero la consulta será algo más elaborada. Habría que ver la consulta completa, y al menos una muestra de datos puros (registros reales de la tabla).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/08/2013, 11:04
 
Fecha de Ingreso: agosto-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Evitar repeticiones en tablas.

Si, me gustaría evitarlo ya que la solución sería ver solamente uno.

El enunciado del ejercicio es el siguiente:

- Nombre y apellidos de parejas de profesores cuya diferencia de antigüedad (en valor absoluto) sea inferior a dos años y pertenezcan al mismo departamento.
Muestre la antigüedad de cada uno de ellos en años.

Y mi solución actual es:

select p1.nombre, p1.apellido1, p1.apellido2, TRUNC(months_between(sysdate, p1.antiguedad)/12) as antiguedad_p1,
p2.nombre, p2.apellido1, p2.apellido2, TRUNC(months_between(sysdate, p2.antiguedad)/12) as antiguedad_p2

from profesores p1, profesores p2

where abs(months_between(sysdate, p1.antiguedad)/12-(months_between(sysdate, p2.antiguedad))/12) < 2
AND p1.departamento = p2.departamento
AND p1.nrp != p2.nrp;

nrp es un valor numérico único, asi evito que salga Juan 2 Juan 2 (por ejemplo).

Etiquetas: nombre, repeticiones
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 19:23.