如何在创建新的 table 时默认具有其他 table 列值的列?
How to default a column with value of a colunm of other table when create a new table?
CREATE TABLE "Family" (
"Family_ID" INTEGER NOT NULL,
"Name" TEXT(20) NOT NULL,
);
CREATE TABLE "Babygirl" (
"Baby_Id" INTEGER NOT NULL,
"Family_ID" INTEGER NOT NULL,
"Family_Name" TEXT(20) NOT NULL default......,
"Last_Name" TEXT(20) NOT NULL,
);
我如何在 Family_name 用户之后写入 default 的 sql [=15] =] 家庭 table 的姓名?
简单的回答:你不能(不是默认的)。如果您已经有了家庭 table 的外键,则不需要 Babygirl table 上的名字。当你需要它时,只需将两个 table 加入一个简单的 sql 语句即可。
也不要在您的 table 名称和列名上使用双引号。很难向它写入 sql 语句。
类似于:
select f.columnsFromFamily,
b.columnsFromBabyGirl -- this is just an example
from Family f
inner join Babygirl b ON f.Family_ID = b.Family_ID
如果您选择此方法,请从 Babygirl
table 中删除 Family_Name
列。
你唯一可以随心所欲地做的事情(重复名字)就是有一个触发器来这样做。类似于:
CREATE OR REPLACE TRIGGER ON trg_Babygirl
BEFORE INSERT
ON Baygirl
as
DECLARE
vFamilyName Family.Name%ROWTYPE;
BEGIN
select Name INTO vFamilyName
from Family
where Family_id = :NEW.Family_ID;
--set the name here
:NEW.Family_Name := vFamilyName;
END;
我强烈反对这种方法。只要坚持使用外键即可。
CREATE TABLE "Family" (
"Family_ID" INTEGER NOT NULL,
"Name" TEXT(20) NOT NULL,
);
CREATE TABLE "Babygirl" (
"Baby_Id" INTEGER NOT NULL,
"Family_ID" INTEGER NOT NULL,
"Family_Name" TEXT(20) NOT NULL default......,
"Last_Name" TEXT(20) NOT NULL,
);
我如何在 Family_name 用户之后写入 default 的 sql [=15] =] 家庭 table 的姓名?
简单的回答:你不能(不是默认的)。如果您已经有了家庭 table 的外键,则不需要 Babygirl table 上的名字。当你需要它时,只需将两个 table 加入一个简单的 sql 语句即可。
也不要在您的 table 名称和列名上使用双引号。很难向它写入 sql 语句。
类似于:
select f.columnsFromFamily,
b.columnsFromBabyGirl -- this is just an example
from Family f
inner join Babygirl b ON f.Family_ID = b.Family_ID
如果您选择此方法,请从 Babygirl
table 中删除 Family_Name
列。
你唯一可以随心所欲地做的事情(重复名字)就是有一个触发器来这样做。类似于:
CREATE OR REPLACE TRIGGER ON trg_Babygirl
BEFORE INSERT
ON Baygirl
as
DECLARE
vFamilyName Family.Name%ROWTYPE;
BEGIN
select Name INTO vFamilyName
from Family
where Family_id = :NEW.Family_ID;
--set the name here
:NEW.Family_Name := vFamilyName;
END;
我强烈反对这种方法。只要坚持使用外键即可。