Quiero completar las configuraciones de notificación vacías para cada usuario que ya existe. Los ID (PK) son generados automáticamente por Hibernate en cada tabla. Aquí está la tabla de usuarios:
CREATE TABLE lottery_user ( id int8 not null, email varchar(255) not null, password varchar(255) not null, notification_settings_id int8, role varchar (50) default 'USER', registry_date TIMESTAMP default now(), primary key (id) ADD CONSTRAINT FK_USER_TO_NOTIFICATION_SETTINGS FOREIGN KEY (notification_settings_id) REFERENCES notification_settings );Y aquí está la tabla de configuración de notificaciones que debo completar para los usuarios que no la tienen completa.
CREATE TABLE notification_settings ( id int8 not NULL , test1_events bool DEFAULT TRUE , test2_events bool DEFAULT TRUE , test3_events bool DEFAULT TRUE , test4_events bool DEFAULT TRUE , PRIMARY KEY (id) ); Básicamente, necesito usar "INSERT INTO notification_settings (test1_events, test2_events, test3_events, test4_events) VALUES (True, True, True, True)" algo similar a eso. Y, por supuesto, la condición debería ser algo como esto "donde estas filas están vacías para los usuarios". Parece que no puedo obtener la sintaxis correcta.
GRAN NOTA: el código SQL es para fines de presentación, por lo que puede tener una idea de qué tipo de tablas tengo. Solo necesito obtener el script INSERT correcto. Las tablas funcionan bien, solo es necesario generar valores de configuración de notificación para los usuarios que ya existen.
Otra nota: usar Flyway, por lo que no se trata solo de Hibernate. Si eso tiene que ver con algo.
¿Estás buscando solo:
INSERT INTO notification_settings (id) SELECT id FROM user WHERE id NOT IN (SELECT id FROM notifiation_settings)Es posible que desee insertar en un campo de identidad:
SET IDENTITY_INSERT my_table ONDado que su restricción de clave externa va de la configuración_notificación al usuario, la condición "donde estas filas están vacías para el usuario X" no se aplica a su esquema. Por otro lado, "Quiero completar las configuraciones de notificación vacías para cada usuario que ya existe" se puede hacer usando una construcción insert...select :
set @rank=0 select @maxid = max(id) from notification_settings insert into notification_settings (id) select @maxid + @rank:=@rank+1 as rank from user where notification_settings_id is nullLo que es interesante es cómo vuelve a colocar esas ID recién generadas en la tabla de usuarios. Tarea para la próxima vez :)
INSERTAR EN la configuración_notificación (id)
SELECCIONE u.id DESDE el usuario u DONDE
no existe (SELECCIONE * DESDE notifiation_settings ns donde ns.id=i.id)