Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Seleccionar primer registro en la Clausula WHERE para Actualizar Valor. (https://www.clubdelphi.com/foros/showthread.php?t=78939)

Adrian Murua 28-05-2012 10:25:48

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.

ecfisa 28-05-2012 10:32:58

Hola Adrian.

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

Saludos.

ecfisa 28-05-2012 21:33:41

Hola de nuevo.

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

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. :)

Adrian Murua 28-05-2012 22:52:14

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.


La franja horaria es GMT +2. Ahora son las 05:09:54.

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