Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Actualizar el contenido de las primeras celdas UPDATE TOP (https://www.clubdelphi.com/foros/showthread.php?t=17963)

tiagor64 27-01-2005 09:31:32

Actualizar el contenido de las primeras celdas UPDATE TOP
 
Hola foro:

Necesitaria q alguien me saque d un apuro, necesito actualizar el valor de los 15 primeros registros q saca una consulta, pero no se como hacerlo.
La consulta que funciona es esta:

SELECT TOP 15 REGISTRE.ORDEN_FABRICACION, REGISTRE.ACABADOS, REGISTRE.FECHA, REGISTRE.PRIORIDAD
FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD;

pero no se como hacer para que me modifique el valor del campo acabados de estos registros.

con la consulta:

update registre
set acabados = "0"
where (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD

entonces me actualiza el valor de todos los registros y solo necesitaria los 15 o 10 primeros.

Alguien puede ayudarme??
Gracias por adelantado.

Neftali [Germán.Estévez] 27-01-2005 10:52:58

Si la tabla REGISTRE tiene "clave primaria" puedes utilizar un IN. Algo así (te lo pongo sin probar, así que ya dirás si me he dejado algo); Como mínimo te servirá para coger la idea...

(suponiendo por ejemplo que el campo ORDEN_FABRICACION fuera la primary key)

Código SQL [-]
  update registre
  set acabados = "0"
  where ORDEN_FABRICACION IN (
     SELECT TOP 15 REGISTRE.ORDEN_FABRICACION
     FROM REGISTRE
     WHERE (((REGISTRE.ACABADOS) Is Null)))
 ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD

Se trata de usar el SELECT..IN para seleccionar los 15 primeros y luego hacer el update sólo sobre esos.

NOTA: El ORDER BY para el Update no es necesario

tiagor64 27-01-2005 12:37:06

Muchas, muchisimas gracias.

si que ha servido para pillar la idea, me has sacado de un buen atasco mental.

la sentencia me a qedado asi:

UPDATE registre SET acabados = "0"
WHERE ORDEN_FABRICACION IN
(SELECT TOP 1 REGISTRE.ORDEN_FABRICACION FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD);

Lo que me pasaba era q la tenia asi y me devolvia demasiados campos, y no entendia el problema

update registre
set acabados = "0"
where
( SELECT TOP 15 * FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD)

muchas gracias de nuevo.





La franja horaria es GMT +2. Ahora son las 10:58:56.

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