I have user_settings table with two columns, userId and value which is currently empty but have another users table and now I need to add migration with query which should popuplate user_settings table for all users with some default value for value column.
I began with INSERT INTO "user_settings" ("userId", "value") VALUES ($1, $2) and got stuck. How to loop all id's from users table and fill this user_settings table with some default value...
CodePudding user response:
There is really no need to 'loop' through the rows in users, as you can easily achieve this using an INSERT INTO SELECT statement (https://www.w3schools.com/sql/sql_insert_into_select.asp) like this:
SET @default = 'your_settings';
INSERT INTO `user_settings` (
`userId`,
`value`
)
SELECT
id,
@default
FROM
users
Suppose you are using a DBMS that supports triggers, you could also add a trigger to insert default settings upon inserting new records in users.
In MySQL it might look something like this:
DELIMITER $$
CREATE TRIGGER after_user_insert
AFTER INSERT
ON
users
FOR EACH ROW
BEGIN
INSERT INTO user_settings (
userId,
value
)
VALUES (
NEW.id,
'your_settings'
);
END$$
DELIMITER ;
(Assuming the primary key on users table is called id.)
CodePudding user response:
Assuming some syntax elements here because you didn't say which database system you are using.
INSERT INTO "user_settings" ("userId", "value")
SELECT DISTINCT "userId", 'defaultvalue'
FROM "users"
To learn more, read training materials such as those found at: https://www.w3schools.com/sql/default.asp
