SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » NULL-евые FK в джойнах
NULL-евые FK в джойнах [сообщение #975] Sun, 13 November 2022 23:58 Переход к предыдущему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 101
Зарегистрирован: June 2022
Senior Member
Имеется две табли

/* мастер */
CREATE GENERATOR GEN_TBL_MAST_ID;

CREATE TABLE TBL_MAST (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR(20) NOT NULL
);

ALTER TABLE TBL_MAST ADD CONSTRAINT PK_TBL_MAST PRIMARY KEY (ID);

SET TERM ^ ;
CREATE OR ALTER TRIGGER TBL_MAST_BI FOR TBL_MAST
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_TBL_MAST_ID,1);
END
^
SET TERM ; ^

/* деталька */
CREATE GENERATOR GEN_TBL_DETAIL_ID;

CREATE TABLE TBL_DETAIL (
    ID       INTEGER NOT NULL,
    FK_MAST  INTEGER,
    NAME     VARCHAR(30)
);

ALTER TABLE TBL_DETAIL ADD CONSTRAINT PK_TBL_DETAIL PRIMARY KEY (ID);
ALTER TABLE TBL_DETAIL ADD CONSTRAINT FK_TBL_DETAIL_1 FOREIGN KEY (FK_MAST) REFERENCES TBL_MAST (ID) ON DELETE SET NULL;

SET TERM ^ ;
CREATE OR ALTER TRIGGER TBL_DETAIL_BI FOR TBL_DETAIL
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_TBL_DETAIL_ID,1);
END
^
SET TERM ; ^

данные
INSERT INTO TBL_MAST (ID, NAME) VALUES (1, 'master1');
INSERT INTO TBL_MAST (ID, NAME) VALUES (2, 'master2');

INSERT INTO TBL_DETAIL (ID, FK_MAST, NAME) VALUES (1, 1, 'val_1');
INSERT INTO TBL_DETAIL (ID, FK_MAST, NAME) VALUES (2, 2, 'val_2');
INSERT INTO TBL_DETAIL (ID, FK_MAST, NAME) VALUES (3, NULL, 'val_null');
запрос вида

SELECT 
    M.ID MAST_ID,
    M.NAME MAST_NAME,
    D.ID DET_ID,
    D.FK_MAST FK,
    D.NAME DET_NAME
FROM TBL_DETAIL D
   INNER JOIN TBL_MAST M ON (D.FK_MAST = M.ID)
вернет только те записи, где D.FK_MAST = M.ID.

Как можно добавить записи с null-левым FK?


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/
 
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Предыдущая тема: комментарии с русскими буквами
Следующая тема: Shutting down the server with 1 active connection(s)
Переход к форуму:
  


Текущее время: Sun Nov 24 00:21:54 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01080 секунд