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?
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:
Explicación:
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.