Tabla 1:
id name desc
-----------------------
1 a abc
2 b def
3 c adf
Tabla 2:
id name desc
-----------------------
1 x 123
2 y 345
En Oracle SQL, ¿cómo ejecuto una consulta de actualización SQL que puede actualizar la Tabla 1 con la Tabla 2 namey descusar la misma id? Entonces el resultado final que obtendría es
Tabla 1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
La pregunta se toma de la actualización de una tabla con datos de otra , pero específicamente para Oracle SQL.
sql
oracle
sql-update
Muhd
fuente
fuente

Respuestas:
Esto se llama actualización correlacionada
Suponiendo que la unión da como resultado una vista con clave preservada, también podría
fuente
WHERE EXISTSimpide actualizar una filat1si no hay una fila coincidentet2. Sin ella, cada filat1se actualizará y los valores se establecerán enNULLsi no hay una fila coincidentet2. Eso generalmente no es lo que quiere que suceda, por loWHERE EXISTSque generalmente se necesita.SELECT ... FROM t2debe ser una fila única. Esto significa que debe seleccionar en todos los campos que comprenden una clave única; una clave primaria no única no es suficiente. Sin unicidad, se reduce a algo como el bucle de @ PaulKarr, y si no hay una correlación única, entonces se puede actualizar más de una fila de destino para cada fila de origen.table2) está devolviendo varias filas para uno o mástable1valores y Oracle no sabe cuál desea usar. Normalmente, eso significa que necesita refinar la subconsulta para que devuelva una única fila distinta.Prueba esto:
fuente
table1ytable2son la misma tabla, solo tenga en cuenta la parteONy laWHEREcláusula para laSELECTdeclaración detable2!tratar
fuente
nunca funcionó para mí, ya que set solo espera 1 valor - Error de SQL: ORA-01427: la subconsulta de una sola fila devuelve más de una fila.
Aquí está la solución:
Así es exactamente como lo ejecuta en la hoja de trabajo SQLDeveloper. Dicen que es lento, pero esa es la única solución que me funcionó en este caso.
fuente
Aquí parece haber una respuesta aún mejor con la cláusula 'in' que permite múltiples claves para la unión :
El problema está en tener las columnas que desea utilizar como clave entre paréntesis en la cláusula where antes de 'in' y tener la instrucción select con los mismos nombres de columna entre paréntesis. where ( column1, column2 ) en ( select ( column1, column2 ) de la tabla donde "el conjunto que quiero" );
fuente
404)Si su tabla t1 y su copia de seguridad t2 tienen muchas columnas, aquí hay una forma compacta de hacerlo.
Además, mi problema relacionado era que solo algunas de las columnas se modificaron y muchas filas no tenían modificaciones en estas columnas, por lo que quería dejarlas en paz, básicamente restaurar un subconjunto de columnas a partir de una copia de seguridad de toda la tabla. Si solo desea restaurar todas las filas, omita la cláusula where.
Por supuesto, la forma más sencilla sería eliminar e insertar como select, pero en mi caso necesitaba una solución con solo actualizaciones.
El truco es que cuando selecciona * de un par de tablas con nombres de columna duplicados, la segunda se llamará _1. Así que esto es lo que se me ocurrió:
fuente
fuente