Ayuda con postgreSQL para mis practicas porfavor

gusta1996 Seguir

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 Jun 2019
Mensajes
483
hola betas necesito ayuda con postgreSQL para mis practicas porfavor.
----------------------------------------------------
Tengo las siguiente tablas:

Tabla 1: contrato
columnas tabla 1: id_contrato, estado

Tabla 2: funcionario_estructura
columnas tabla 2: id_funcionario_estructura, estado, id_contrato_fk (clave foranea)
----------------------------------------------------

lo que necesito es:
una sentencia postgreSQL que actualice un registro en la tabla "contrato" columna "estado" el valor a "anulado" pero con 2 condiciones:
  • que solo se actualize si su "id_contrato" no existe en ningun registro de "id_contrato_fk" de "funcionario_estructura"
  • y si tienen registros, todos los registros en la tabla "funcionario_estructura" columna "estado" deben ser "anulado" para poder actulizar
He intentado hacer, pero no conozco mucho sobre el tema
de antemano gracias y dejo les imagenes

1694457456311.png
 

Adjuntos

  • 1694457438584.png
    1694457438584.png
    371,1 KB · Visitas: 15

BotBeta

Admin
Sigma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Suscripción a IA
Desde
13 Jun 2020
Mensajes
29.827
Podrías probar con este:

SQL:
UPDATE contrato
SET estado = 'anulado'
WHERE id_contrato NOT IN (
SELECT id_contrato_fk FROM funcionario_estructura WHERE estado != 'anulado')

Esta consulta actualizará la columna 'estado' a 'anulado' en la tabla 'contrato', pero sólo para aquellos registros cuyo 'id_contrato' no exista en 'funcionario_estructura' con 'estado' diferente de 'anulado'.

Recuerda siempre realizar una copia de seguridad de tus datos antes de ejecutar consultas de actualización.
 

moiseseccam

Pi
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
5 Mar 2013
Mensajes
6.359
Explícate mejor. No es los mismo que poner "anulado" a todos los registros en ambas tablas?
 

gusta1996

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 Jun 2019
Mensajes
483
Explícate mejor. No es los mismo que poner "anulado" a todos los registros en ambas tablas?

necesito esto:
que se actualize la columna 'estado' de la tabla 'contrato' pero con estas 2 condiciones
  • Si el "id_contrato" se esta usando en la clave foranea "id_contrato_fk"... todos los registros en la tabla "funcionario_estructura" columna "estado" deben ser "anulado" para poder actulizar
  • o si no si no se esta usando el "id_contrato" en la clave foranea "id_contrato_fk"
con ayuda de chatGPT esto es lo mas cercano que pude hacer, pero sigue sin funcionar

SQL:
UPDATE contrato
SET estado = :estado
WHERE id_contrato = :id_contrato
AND (
    ( id_contrato IN (
        (SELECT id_contrato_fk FROM funcionario_estructura) = (SELECT id_contrato_fk FROM funcionario_estructura WHERE estado = 'Anulado')
        )
    )
    OR (
        id_contrato NOT IN (SELECT id_contrato_fk FROM funcionario_estructura)
    )
)
 

webcoder

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
9 Ago 2023
Mensajes
93
Seria algo asi:

Insertar CODE, HTML o PHP:
UPDATE contrato
SET estado = :estado
WHERE id_contrato = :id_contrato
AND NOT EXISTS(SELECT 1 FROM funcionario_estructura f 
WHERE f.id_contrato_fk=contrato.id_contrato AND f.estado <> 'Anulado')
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba