Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2016
Man0261 Man0261 is offline
Registrado
NULL
 
Registrado: feb 2016
Posts: 8
Poder: 0
Man0261 Va por buen camino
Creo que no me expliqué. Yo tengo que transferir los datos de una tabla que contiene dos tuplas erróneas ya que violan la clave primaria. Entonces tengo que insertar en la nueva tabla sólo una de esas dos tuplas. La que en uno de sus atributos, tiene un valor mayor respecto a la otra.
Responder Con Cita
  #2  
Antiguo 28-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Man0261 Ver Mensaje
Yo tengo que transferir los datos de una tabla que contiene dos tuplas erróneas ya que violan la clave primaria. Entonces tengo que insertar en la nueva tabla sólo una de esas dos tuplas. La que en uno de sus atributos, tiene un valor mayor respecto a la otra.
Si no entendí mal podes hacer:
Código SQL [-]
INSERT INTO DESTINO (ID, ATRIBUTO /*, ...*/)
SELECT T1.ID, T1.ATRIBUTO /*, ... */
FROM ORIGEN T1
WHERE T1.ATRIBUTO = (SELECT MAX(T2.ATRIBUTO) 
                     FROM ORIGEN T2
                     WHERE T2.ID = T1.ID)
Donde la columna ID representa la clave primaria y ATRIBUTO la columna de mayor valor a seleccionar.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-02-2016
Man0261 Man0261 is offline
Registrado
NULL
 
Registrado: feb 2016
Posts: 8
Poder: 0
Man0261 Va por buen camino
Hola, gracias!!

T1.ID qué significa? y T2?

Solo hay dos tablas. La de origen, y la tabla donde quiero almacenar las cosas..
Responder Con Cita
  #4  
Antiguo 28-02-2016
Man0261 Man0261 is offline
Registrado
NULL
 
Registrado: feb 2016
Posts: 8
Poder: 0
Man0261 Va por buen camino
Cita:
Empezado por Man0261 Ver Mensaje
Hola, gracias!!

T1.ID qué significa? y T2?

Solo hay dos tablas. La de origen, y la tabla donde quiero almacenar las cosas..
Tengo que hacer algo asi como agrupar las tuplas por el atributo por el que quiero insertar en función de él. He pensado en agruparlos por orden según esa variable, y luego insertarlas tuplas solo si antes no había metida una tupla con la misma clave primaria. No sé si esto es lo que me pones en el código o no pero me he hecho un lío porque me has puesto como 3 tablas si no he visto bien, y solo influyen 2 tablas.. De todas formas no sabría hacer en lenguaje SQL lo que he expuesto
Responder Con Cita
  #5  
Antiguo 28-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Man0261 Ver Mensaje
Hola, gracias!!

T1.ID qué significa? y T2?

Solo hay dos tablas. La de origen, y la tabla donde quiero almacenar las cosas..
Son alias, uno por cada tabla. T1 para la tabla ORIGEN y T2 para la tabla DESTINO.

Algunos gestores podrían requerir la sintáxis completa:
Código SQL [-]
SELECT * FROM NOMBRE_TABLA AS NOMBRE_ALIAS 
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 28-02-2016
Man0261 Man0261 is offline
Registrado
NULL
 
Registrado: feb 2016
Posts: 8
Poder: 0
Man0261 Va por buen camino
Pero me has puesto la tabla ORIGEN T1, ORIGEN T2 Y DESTINO
Responder Con Cita
  #7  
Antiguo 28-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

DESTINO es la tabla donde se hará la inserción resultado de las selecciones. T1 y T2 son ambos alias de la tabla origen pero pertenecen a distintas selecciones.

Te convendría profundizar más sobre SQL, algunos enlaces:
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 28-02-2016
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Tienes que realizar un análisis de las tuplas antes de intentar insertarlas. Es decir, tienes que verificar si hay tuplas con misma clave primaria y dado el caso definir cual será la que deberás insertar. Una vez analizadas y procesadas entonces sí mandárselas al motor de BD. Si lo haces directamente en la BD se daría el siguiente supuesto:

Código:
  Se inserta tupla 1 de tabla A en tabla B
  Se toma siguiente tupla de tabla A
  clave de tupla 2 de tabla A ya existe en tabla B?
      [NO] insertar tupla 2 de tabla A en tabla B
      [SI] x propiedad de tupla 2 de tabla A es mayor que la que tiene la misma clave en tabla B ?
            [NO] No insertar nada y saltar a siguiente tupla de tabla A
            [SI] Eliminar tupla existente de tabla B e insertar la nueva tupla en tabla B
  Continuar con siguiente tupla de tabla A y repetir ciclo
Depende donde quieras colocar la lógica de negocio de tu aplicacion. En cualquier caso deberás usar una transacción para garantizar que si algo falla no te deje a medias alguna tabla.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #9  
Antiguo 29-02-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Man0261 Ver Mensaje
Yo tengo que transferir los datos de una tabla que contiene dos tuplas erróneas ya que violan la clave primaria. Entonces tengo que insertar en la nueva tabla sólo una de esas dos tuplas. La que en uno de sus atributos, tiene un valor mayor respecto a la otra.
Ordena la tabla por este atributo ("en uno de sus atributos, tiene un valor mayor respecto a la otra");
A la hora de insertar, se insertará primero, el que tiene el atributo mayor (que es lo que necesitas).
El resto de inserciones fallarán por clave duplicada.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Clave primaria a 0 aromigaret Conexión con bases de datos 15 05-02-2016 23:55:03
duda clave primaria en Paradox mak8888 Tablas planas 1 26-06-2005 21:48:57
Ayuda Con Clave Primaria pablo2244 MySQL 4 30-05-2005 21:49:01
Cambiar clave primaria pinoxito Firebird e Interbase 7 13-01-2004 21:51:26
cambiar una clave primaria User_Baja_2 SQL 3 06-10-2003 18:03:38


La franja horaria es GMT +2. Ahora son las 22:34:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi