sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo inserto en una tabla desde otra tabla haciendo coincidir los valores?

Puede unir tablas adicionales en un UPDATE declaración, permitiendo esta forma preferible:

UPDATE books b
SET    author_id = a.author_id
FROM   authors a
WHERE  b.author = a.author_name;

Tres razones:

  • Es más seguro. Su consulta escribirá un valor NULL en cada fila donde no se encuentre un autor coincidente. Eso no parece importar en su caso, pero puede conducir potencialmente a la pérdida de datos en consultas similares en las que ya tiene datos en la columna para actualizar. Mi alternativa no hace nada si no se encuentra un autor coincidente.

  • Es mas rapido. Lo anterior para uno. Pero también porque subconsultas correlacionadas como si tuvieras escala terriblemente. Unirse a una tabla generalmente es más rápido, especialmente con más de unas pocas filas.

  • Es más limpio y más fácil de adaptar a columnas adicionales.