¿Por qué estoy obteniendo “Insert tiene más columnas de destino que expresiones”?
Tengo una tabla llamada source con 3 columnas (source_id, name, tenant_id) y algunos datos en ella.
Estoy intentando insertar datos en la tabla verificando su existencia en la misma. Pero estoy obteniendo este error… ¿alguna idea de cómo resolverlo?
La consulta –
INSERT INTO moa.source(source_id, name, tenant_id)
SELECT ((select max(source_id)+1 from moa.source), ‘GE OWS – LHR’, 1)
WHERE NOT EXISTS(SELECT 1 FROM moa.source where name = ‘GE OWS – LHR’);
El error:
ERROR: INSERT tiene más columnas de destino que expresiones
LINE 1: INSERT INTO moa.source(source_id, name, tenant_id)
^
HINT: La fuente de inserción es una expresión de fila que contiene el mismo número de columnas esperadas por el INSERT. ¿Utilizaste accidentalmente paréntesis adicionales?
SQL state: 42
La tabla:
davy.ai
El problema con la consulta es que la instrucción SELECT devuelve un valor, pero la instrucción INSERT espera insertar 3 valores en las respectivas columnas. Una posible solución es agregar el valor faltante para la columna source_id en la instrucción SELECT eliminando los paréntesis adicionales, de la siguiente manera:
Esto debería insertar correctamente la nueva fila en la tabla source, con el próximo valor de source_id disponible. La cláusula WHERE NOT EXISTS garantiza que la nueva fila solo se inserte si aún no existe una fila con el mismo nombre.