Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

180
Vistas
Evite repetir el valor predefinido en la inserción de SQL en

Estoy buscando insertar un par de valores asociados a un par de identificaciones sin codificar esas identificaciones en la consulta.
Más concretamente, tengo esta tabla foo :

 create table if not exists foo(id int, val text);

y puedo insertar mis valores haciendo:

 insert into foo values (10, 'qwe_1'), (10, 'qwe_2'), (10, 'qwe_3'), (20, 'qwe_2'), (20, 'asd_3'), (20, 'asd_4');

pero no quiero repetir esos 10 y 20 .

Hice una pregunta similar hace un tiempo ( SQL - Usar CON para declarar variable en INSERTAR EN ) pero no resuelve mi problema. Tampoco puedo entender cómo usar una combinación o similar como se sugiere en INSERTAR valores repetidos en SQL , ya que la lista de valores que quiero agregar por identificación es arbitraria.


Si bien no es estrictamente necesario, me gustaría usar una declaración with para declarar primero mis identificaciones:

 with c (first_id, second_id) as (values (10, 20)) select * from c;

pero no entiendo cómo combinar eso con la declaración de insert into . Tengo esta consulta que no funciona pero que ilustra lo que estoy tratando de lograr:

 with c (first_id, second_id) as (values (10, 20)) insert into foo values (c.first_id, 'qwe_1'), (c.first_id, 'qwe_2'), (c.first_id, 'qwe_3'), (c.second_id, 'qwe_2'), (c.second_id, 'asd_3'), (c.second_id, 'asd_4') from c;

Tengo entendido que la declaración de values (...), ... devuelve una tabla, así que tal vez lo que me falta es una forma de combinar esta tabla con la tabla c .

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Podrías usar una unión lateral:

 insert into foo (id, val) select v.id, v.val from (values (10, 20)) c(first_id, second_id) cross join lateral (values (c.first_id, 'qwe_1'), (c.first_id, 'qwe_2'), (c.first_id, 'qwe_3'), (c.second_id, 'qwe_2'), (c.second_id, 'asd_3'), (c.second_id, 'asd_4') ) v(id, val);
over 4 years ago · Santiago Trujillo Denunciar

0

Si puede usar una estructura de bloques, usaría esa ruta.

 do $$ DEFINE v_first_id NUMBER := 10; v_second_id NUMBER := 20; BEGIN ... Your Insert Statement ... END; $$
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda