Начало » Использование СУБД » 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/
|
|
|
|
|
Переход к форуму:
Текущее время: Sat Nov 23 22:10:47 GMT+3 2024
Общее время, затраченное на создание страницы: 0.01019 секунд
|