Hola de nuevo. Espero que sea la última pregunta.
Es todo relacionado con mis preguntas anteriores. Hay cosas que he podido solucionar, pero otras no. He podido trabajarlo esta mañana. Cosa que no pude hacer la semana pasada.
Tengo una tabla de infracciones, identificadas por un código, además de por el campo clave primaria (ID_Infraccion). Tienen un código identificativo numérico. Como he dicho anteriormente, la infracción a veces está especificada en otra norma.
La INFRACCION tiene una norma principal asociada. Pero a veces, algunos artículos están asociados a otra norma.
La cuestión es que quiero saber cómo se puede sacar el nombre de la norma. Porque para la principal vale, está el campo Nombre_Norma_Super_Largo de NORMA, pero en INFRACCION hay varias normas referenciadas. Y claro, ya no se puede hacer.
EXPEDIENTE-SANCIONADOR es la tabla donde realmente se usarían todos esos datos.
¿Se puede hacer con macros? ¿O con procedimientos almacenados? De eso, no sé nada. He intentado saber algo de ello, pero no me aclaro.
Os dejo hasta el código.
CREATE TABLE “EXPEDIENTE-SANCIONADOR” (“ID_Expediente” INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 1, INCREMENT BY 1) PRIMARY KEY,
“Ejercicio” INT NOT NULL,
“Expediente” INT NOT NULL,
“Identificador_Denuncia” VARCHAR(30) NOT NULL,
“Motivo_Denuncia” INT NOT NULL,
“Norma_Infringida” INT NOT NULL,
“Descripcion_Ampliacion” VARCHAR(3000),
“Nombre_Apellidos_Infractor” VARCHAR(100) NOT NULL,
CONSTRAINT “uc_expediente” UNIQUE (“Expediente”));
CREATE TABLE “NORMA”
(“ID_Norma” INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 1, INCREMENT BY 1) PRIMARY KEY,
“Nombre_Norma_Super_Largo” VARCHAR(400) NOT NULL
);
CREATE TABLE “INFRACCION”
(“ID_Infraccion” INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 1, INCREMENT BY 1) PRIMARY KEY,
“Codigo_Infraccion” INT NOT NULL,
“Hecho_Denunciado” VARCHAR(200) NOT NULL,
“ID_Norma” INT NOT NULL,
“Art_Infringido” VARCHAR(300) NOT NULL,
“Texto_Articulo_Infringido” VARCHAR(3000) NOT NULL,
“Norma_Secundaria_Art_Infringido” INT,
“Articulo_Calificacion” VARCHAR(300) NOT NULL,
“Calificacion” INT NOT NULL,
“Norma_Secundaria_Art_Calificacion” INT,
CONSTRAINT “uc_codigo_infraccion” UNIQUE (“Codigo_Infraccion”)
);
ALTER TABLE “INFRACCION” ADD FOREIGN KEY (“ID_Norma”) REFERENCES “NORMA”(“ID_Norma”);
ALTER TABLE “INFRACCION” ADD FOREIGN KEY (“Norma_Secundaria_Art_Infringido”) REFERENCES “NORMA”(“ID_Norma”);
ALTER TABLE “INFRACCION” ADD FOREIGN KEY (“Norma_Secundaria_Art_Calificacion”) REFERENCES “NORMA”(“ID_Norma”);
ALTER TABLE “EXPEDIENTE-SANCIONADOR” ADD FOREIGN KEY (“Motivo_Denuncia”) REFERENCES “INFRACCION”(“ID_Infraccion”);
ALTER TABLE “EXPEDIENTE-SANCIONADOR” ADD FOREIGN KEY (“Norma_Infringida”) REFERENCES “NORMA”(“ID_Norma”);
CONSULTA1:
SELECT
“INFRACCION”.“ID_Norma”,
“INFRACCION”.“Norma_Secundaria_Art_Infringido”,
“INFRACCION”.“Norma_Secundaria_Art_Calificacion”,
“NORMA”.“Nombre_Norma_Super_Largo”
FROM “EXPEDIENTE-SANCIONADOR”,“INFRACCION”,“NORMA”
WHERE
“NORMA”.“ID_Norma” = “EXPEDIENTE-SANCIONADOR”.“Norma_Infringida” AND
“EXPEDIENTE-SANCIONADOR”.“Motivo_Denuncia” = “INFRACCION”.“ID_Norma”
No usado de momento
Casewhen( “INFRACCION”.“Norma_Secundaria_Art_Infringido” IS NOT NULL, “INFRACCION”.“Norma_Secundaria_Art_Infringido”
, “NORMA”.“Nombre_Norma_Super_Largo” ) “Ley_Secundaria_Art_Infringido”,
“NORMA”.“ID_Norma” = “INFRACCION”.“Norma_Secundaria_Art_Infringido” AND
“NORMA”.“ID_Norma” = “INFRACCION”.“Norma_Secundaria_Art_Calificacion” AND