es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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:

enter image description here

Tags:  , ,

Answer

  1. Avatar for 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:

    INSERT INTO moa.source(source_id, name, tenant_id)
    SELECT max(source_id)+1, 'GE OWS - LHR', 1
    WHERE NOT EXISTS(SELECT 1 FROM moa.source where name = 'GE OWS - LHR');
    

    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.

Comments are closed.