Tengo una tabla en la que estoy tratando de actualizar varios valores a la vez. Aquí está el esquema de la tabla:
Column | Type | Modifiers
---------------+---------+-----------
user_id | integer |
subservice_id | integer |
Tengo el user_id
y quiero insertar varios subservice_id
a la vez. ¿Hay alguna sintaxis Postgres
que me permita hacer algo como esto?
insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
¿Cómo haría esto?
postgresql
jhamm
fuente
fuente
generate_series
consulte dba.stackexchange.com/a/89544/16892Respuestas:
Tratar:
INSERT INTO user_subservices(user_id, subservice_id) SELECT 1 id, x FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x
Demostración: http://www.sqlfiddle.com/#!15/9a006/1
fuente
La sintaxis de inserción de varios valores es:
insert into table values (1,1), (1,2), (1,3), (2,1);
Pero la respuesta de krokodilko es mucho más hábil.
fuente
id
?insert into orders_cancel_reasons_infos values (1,1,"Changed my mind",1), (2,2,"Quality not satisfactory",1), (3,3,"Incompatible or not useful",1), (4,4,"Damaged product but shipping box is good",1), (5,5,"Items arrived too late",1), (6,6,"Missing part or accessories",1), (7,7,"Product and shipping box are damaged",1), (8,8,"Wrong item was sent",1), (9,9,"Defective item",1), (10,10,"Inaccurate description",1), (11,11,"Other",1);
' '
para el texto que está insertando. así que algo como,insert into orders_cancel_reasons_infos values (1,1,'Changed my mind',1), (2,2,'Quality not satisfactory',1)
funcionará. Puede consultar esto para obtener más información sobre las comillas simples y dobles.Una versión más corta de la respuesta de krokodilko:
insert into user_subservices(user_id, subservice_id) values(1, unnest(array[1, 2, 3]));
fuente
insert into user_subservices(user_id, subservice_id) select 1, column_value from table(sys.odcinumberlist(1,2,3))
.insert into user_subservices(user_id, subservice_id) values(1, unnest(ARRAY(select id from subservices where name like '%test%')));
Una respuesta ligeramente relacionada porque sigo encontrando esta pregunta cada vez que trato de recordar esta solución. Inserte varias filas con varias columnas :
insert into user_subservices (user_id, subservice_id) select * from unnest(array[1, 2], array[3, 4]);
fuente
Ejemplo más sólido, para cuando necesita insertar varias filas en una tabla para cada fila en otra tabla:
INSERT INTO user_subservices (user_id, subservice_id) SELECT users.id AS user_id, subservice_id FROM users CROSS JOIN unnest(ARRAY[1,2,3]) subservice_id;
fuente