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.

Oracle SQL – Actualizar datos de una columna usando el operador MINUS

Tengo esta consulta SQL:

(select x.a, x.b, x.c, x.d
from tableX x
where x.a IS NOT NULL
minus 
select y.a, y.b, y.c, y.d
from tableY y);

La consulta anterior me devuelve todos los datos de tableX que son diferentes a tableY. Se devuelven múltiples tuplas.

Evidencia:

Cuando ejecuto la consulta anterior, obtengo este resultado:

a b c
1 43 65
2 66 333

Cuando selecciono datos de tableY, obtengo esto:

a b c
1 54 65
2 88 567

Los datos de tableY son los datos correctos, así que quiero actualizar todas las tuplas que se devuelven de la primera consulta (la que tiene la cláusula MINUS) con los datos de tableY.

El resultado esperado, después de la cláusula UPDATE, cuando selecciono datos de tableX, debería ser:

a b c
1 54 65
2 88 567

¿Cuál es la manera más eficiente de hacer esta cláusula UPDATE?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La forma más eficiente de realizar la cláusula UPDATE en este escenario sería usar una subconsulta correlacionada. Esto eliminaría la necesidad de múltiples uniones o tablas temporales.

    La sintaxis para la actualización de subconsultas correlacionadas sería la siguiente:

    UPDATE tablaX x
    SET (b, c) = (SELECT y.b, y.c FROM tablaY y WHERE y.a = x.a)
    WHERE x.a IN (SELECT a FROM tablaY);
    

    Explicación:

    • La cláusula SET actualiza las columnas en tablaX que necesitan ser actualizadas, en este caso b y c.
    • La subconsulta correlacionada selecciona los valores de b y c de tablaY donde el valor de a se corresponde en ambas tablas.
    • La cláusula WHERE limita la actualización solo a aquellas filas en tablaX donde el valor de a está presente en tablaY.

    Al utilizar este método, la consulta solo actualiza las filas necesarias y no afecta ningún otro dato en tablaX. También evita la necesidad de tablas temporales o uniones complicadas, lo que lo convierte en una forma más eficiente de actualizar los datos.

Comments are closed.