es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DB2 LUW MERGE utilizando la misma tabla para actualizar una fila diferente.

Mis datos de tabla se ven así

enter image description here

Mi intento fallido de SQL es este…

MERGE INTO PRINT objetivo  
USING  
(  
    select ID,PDF_FILE   
    from PRINT  
    where date(PRINTED) = '2022-01-06'  
      and PDF_FILE is not null  
) sause  
ON (objetivo.ID = sause.ID)  
WHEN MATCHED THEN  
    UPDATE SET objetivo.PDF_FILE = sause.PDF_FILE  

Está actualizando todas las filas de la tabla. No quiero que haga eso.

¿Cómo puedo hacer que solo actualice la última fila IMPRESA que tenga un PDF_FILE vacío?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para actualizar solo la última fila IMPRESA con un PDF_FILE vacío, puede modificar la consulta SQL para utilizar una subconsulta en la cláusula ON para filtrar la fecha IMPRESA máxima con un PDF_FILE vacío. Aquí tienes un ejemplo de cómo puedes modificar la consulta:

    MERGE INTO PRINT target
    USING (
      SELECT ID, PDF_FILE
      FROM PRINT
      WHERE PDF_FILE IS NOT NULL
    ) source
    ON (
      target.ID = source.ID
      AND target.PRINTED = (
        SELECT MAX(PRINTED)
        FROM PRINT
        WHERE ID = source.ID
          AND PDF_FILE IS NULL
      )
    )
    WHEN MATCHED THEN
      UPDATE SET target.PDF_FILE = source.PDF_FILE;
    

    Esta consulta selecciona todas las filas en la tabla PRINT que tienen un PDF_FILE no nulo y las fusiona en la tabla de destino. La cláusula ON filtra las filas coincidentes por ID y la última fecha IMPRESA con un PDF_FILE vacío utilizando una subconsulta. Solo se actualizará la fila coincidente con la última fecha IMPRESA y un PDF_FILE vacío con el valor correspondiente de PDF_FILE de la tabla de origen.

Comments are closed.