Saltar al contenido

‘La referencia de columna es ambigua’ al insertar un elemento en la tabla

Solución:

De los documentos,

conflicto_accion especifica una acción alternativa EN CONFLICTO. Puede ser DO NOTHING o una cláusula DO UPDATE que especifique los detalles exactos de la acción UPDATE que se realizará en caso de conflicto. Las cláusulas SET y WHERE en EN CONFLICTO ACTUALIZAR tenga acceso a la fila existente usando el nombre de la tabla (o un alias), y a las filas propuestas para la inserción usando la tabla excluida especial. Se requiere el privilegio SELECT en cualquier columna de la tabla de destino donde se leen las columnas excluidas correspondientes.

Entonces, en su lugar, intente esto por ypercubeᵀᴹ

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(accounts.affiliate_code, excluded.affiliate_code);

Esta respuesta me ayudó a resolver un problema de columna ambiguo ligeramente diferente. Tengo una mesa en la que hacemos acumulaciones diarias en la misma mesa varias veces al día. Necesitamos volver a calcular la acumulación diaria por horas, lo que significa que estamos actualizando la misma fila 24 veces al día.

Parafraseando lo anterior:

INSERT INTO accounts as act 
    (affiliate_code, datum)
SELECT  affiliate_code, datum
FROM
    -- complex multi-table join with "datum" in more than one table.
ON CONFLICT (affiliate_code) DO
    UPDATE SET 
        -- Update knows "datum" is the target row
        datum = excluded.datum
    WHERE
        -- Here update needs to be told which of the multiple tables
        -- with datum to use. 
        act.datum != excluded.datum;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *