Estoy trabajando con un código. Hay varias consultas cuyo efecto es, si la fila existe con algunos de los datos ingresados, esa fila se actualiza con el resto de los datos, y si la fila no existe, se crea una nueva. Son similares a esto:¿Cómo funciona esta consulta SQL para actualizar una fila si existe, o insertar si no?
INSERT INTO table_name (col1, col2, col3) SELECT %s AS COL1, %s AS COL2, %s AS COL3 FROM (SELECT %s AS COL1, %s AS COL2, %s AS COL3) A LEFT JOIN table_name B ON B.COL1 = %s AND B.COL2 = %s --note: doesn't mention all columns here WHERE B.id IS NULL LIMIT 1
que puede imitar este patrón y parece que funciona, pero estoy confundido en cuanto a lo que realmente está pasando detrás de las escenas. ¿Alguien puede dilucidar cómo funciona esto realmente? Estoy usando PostgreSQL.
ah así que esto no actualizará realmente una entrada que ya existe? es solo asegurarse de que las filas duplicadas no se creen? – Claudiu
Sí, la cláusula where es solo para asegurarse de que no haya duplicaciones. –
es aquí una diferencia con respecto a algo como: 'INSERT INTO table_name (col1, col2, col3) SELECCIONE% s,% s,% s WHERE NOT EXISTS (SELECCIONE * FROM table_name como T WHERE T.col1 =% s AND T.col2 =% s) '? – Claudiu