Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2012
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Poder: 0
Adrian Murua Va por buen camino
Question Seleccionar primer registro en la Clausula WHERE para Actualizar Valor.

Estimados amigos:

Tengo una tabla llamada afiliadoscontrol y otra afiliados , relacionadas por el id del afiliado, afiliados guarda los datos del afiliado y afiliadoscontrol guarda una lista de codigos de control de cuentas de cada afiliado de una mutual, se podria decir que este codigo esta asociado a cada trabajo que tiene un afiiliado de la mutual , es decir si trabaja en dos partes , este afiliado podria tener dos codigos de control distintos.

Ahora bien, por razones de un mejor ordenamiento y control he agregado un campo mas a la tabla que en el caso de que tenga dos codigos de control, me diga cual seria el principal, esto es para realizar determinada operaciones como ser el cobro de la cuota social, este campo es de tipo numerico y tiene valor cero o uno.

El problema es que debo poner un valor de un uno a este campo, que en el caso de que el afiliado tenga un solo codigo, no habria inconveniente, pero si es que tiene dos o mas , tendria que ser el primer valor ingresado de este afiliado. he aqui mi problema, pues no se como hacerlo.

Lo estuve pensando de la siguiente forma :

Código:
UPDATE afiliadoscontrol SET

principal = 1

WHERE (

SELECT * FROM   afiliadoscontrol
  INNER JOIN afiliados ON (afiliadoscontrol.afiliados_id = afiliados.id)
ORDER BY
  afiliadoscontrol.id ASC
LIMIT 1

)
Pero no funciona.

alguna sugerencia?

Gracias por tu tiempo.
__________________
Adrián Murúa.
Responder Con Cita
  #2  
Antiguo 28-05-2012
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 Adrian.

Revisa la cláusula LIMIT en este enlace: Sintaxis de SELECT

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-05-2012
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 de nuevo.

Ahora que releo el hilo, no había visto que habías usado LIMIT, disculpa mi visión de topo

No uso MySQL, pero yo probaría con algo parecido a:
Código SQL [-]
SELECT * FROM AFILIADOSCONTROL
WHERE EXISTS (SELECT AFILIADOS.ID FROM AFILIADOS
              WHERE AFILIADOS.ID = AFILIADOSCONTROL.ID LIMIT 1) 
ORDER BY AFILIADOSCONTROL.ID ASC

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 28-05-2012
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Poder: 0
Adrian Murua Va por buen camino
Unhappy

Gracias por responder ecfisa.

Mira, la idea es poner un 1 en el campo principal a todos aquellos codigos de control que sean los primeros ingresados para un afiliado determinado.
es decir algo como ;

tabla afiliadoscontrol
---------------------

ID | CODIGO | PRINCIPAL | AFILIADOS_ID
----------------------------------------------
1 | 1234567 | 1 | 29 <----- afiliado con un codigo de control
2 | 5638952 | 1 | 120 <----- afiliado 120 con el primer codigo de control campo principal en uno
3 | 2286354 | 0 | 120 <------afiliado 120 con el segundo codigo de control campo principal en cero
4 | 5842087 | 1 | 56 <----- afiliado con un codigo de control
.. | .......... | ..... | .....



El codigo que me propusiste lo probe y selecciona, en el caso del ejemplo de arriba los dos codigos del afiliado 120, lo que pretendo si se puede seria que solo me seleccione uno de los codigo del afiliado 120, que tendria que ser el primero, en este caso.

Estuve investigando y consegui este codigo , pero me sale un error , este es el codigo

Código:
UPDATE afiliadoscontrol as ac SET ac.principal = 1
WHERE ac.id= (SELECT min(af.id) FROM afiliadoscontrol as af
WHERE ac.afiliados_id=af.afiliados_id)
me sale este error : You can't specify target table 'ac' for update in FROM clause.

y no se como solucionarlo.

Gracias por tu tiempo.
__________________
Adrián Murúa.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Seleccionar primer y ultimo registro Jose Roman Firebird e Interbase 14 19-08-2008 21:35:46
Problema Para Actualizar Un Registro sdiaz1983 Conexión con bases de datos 3 21-01-2008 05:00:10
Clausula SQL para mover un registro karlaoax SQL 1 17-08-2007 22:49:25
cláusula Order by impide actualizar en tiempo real? anghell77 SQL 4 30-10-2006 06:11:39
Primer valor trex2000 MS SQL Server 2 11-10-2006 20:45:52


La franja horaria es GMT +2. Ahora son las 20:16:08.


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