--------------------------------------------------------
--
-- DDL for Table TABLE3 - from SQLDeveloper
--------------------------------------------------------
CREATE TABLE "SomeUser"."TABLE3"
( "ID_3" VARCHAR2(1 BYTE),
"SOME_T3_COL" VARCHAR2(20 BYTE)
)
--
-- DDL for Index TABLE3_PK
CREATE UNIQUE INDEX "SomeUser"."TABLE3_PK" ON "SomeUser"."TABLE3" ("ID_3");
--
-- Constraints for Table TABLE3
ALTER TABLE "SomeUser"."TABLE3" MODIFY ("ID_3" NOT NULL ENABLE);
ALTER TABLE "SomeUser"."TABLE3" ADD CONSTRAINT "TABLE3_PK" PRIMARY KEY ("ID_3");
现在您有了定义PK的“主”表。..下一步-你需要“细节”表与FK指的是主人的PK
--------------------------------------------------------
--
-- DDL for Table TABLE1 - from SQLDeveloper
--------------------------------------------------------
CREATE TABLE "SomeUser"."TABLE1"
( "ID_1" VARCHAR2(1 BYTE),
"SOME_T1_COL" VARCHAR2(50 BYTE),
"FK_TO_ID_3" VARCHAR2(1 BYTE)
);
--
-- DDL for Index TABLE1_PK
CREATE UNIQUE INDEX "SomeUser"."TABLE1_PK" ON "SomeUser"."TABLE1" ("ID_1");
--
-- Constraints for Table TABLE1
ALTER TABLE "SomeUser"."TABLE1" MODIFY ("ID_1" NOT NULL ENABLE);
ALTER TABLE "SomeUser"."TABLE1" ADD CONSTRAINT "TABLE1_PK" PRIMARY KEY ("ID_1");
--
-- Ref Constraints for Table TABLE1
ALTER TABLE "SomeUser"."TABLE1" ADD CONSTRAINT "TABLE1_FK1" FOREIGN KEY ("ID_1")
REFERENCES "SomeUser"."TABLE3" ("ID_3") ENABLE;
现在,您可以插入行,记住,应先插入主行,然后再插入与主行相关的详细信息行:
Insert Into TABLE3 VALUES('a', 'some a data'); -- first insert row to the master table
Insert Into TABLE1 VALUES('a', 'some t1_a data reffering to t3PK_a --> ', 'a'); -- now you can insert detail row reffering to the master table's PK
Commit;
Insert Into TABLE3 VALUES('b', 'some b data');
Insert Into TABLE1 VALUES('b', 'some t1_b data reffering to t3PK_b --> ', 'b');
Commit;
--
-- test it:
Select t3.ID_3, t3.SOME_T3_COL, t1.SOME_T1_col, t1.FK_TO_ID_3
From TABLE3 t3
Inner Join TABLE1 t1 ON(t1.FK_TO_ID_3 = t3.ID_3);
--
-- R e s u l t:
ID_3 SOME_T3_COL SOME_T1_COL FK_TO_ID_3
---- -------------------- -------------------------------------------------- ----------
a some a data some t1_a data reffering to t3PK_a --> a
b some b data some t1_b data reffering to t3PK_b --> b
MERGE INTO table3 dst
USING ( SELECT DISTINCT a, b, c, d FROM table2 ) src
ON (src.a = dst.a AND src.b = dst.b AND src.c = dst.c AND src.d = dst.d)
WHEN NOT MATCHED THEN
INSERT (a, b, c, d)
VALUES (src.a, src.b, src.c, src.d);
然后:
INSERT INTO table1 (a, b, c, d, e, f, g)
SELECT a, b, c, d, e, f, 42 FROM table2
3条答案
按热度按时间dfddblmv1#
您所询问的是关于在使用PK和FK的表之间建立和使用relationship。主要是一个(详细)表中的FK引用另一个(主)表中的PK。要做到这一点,你首先应该有主表-也许像这样:
现在您有了定义PK的“主”表。..下一步-你需要“细节”表与FK指的是主人的PK
现在,您可以插入行,记住,应先插入主行,然后再插入与主行相关的详细信息行:
qqrboqgw2#
如果您有表和示例数据:
试着(根据你的评论)用途:
然后你会得到错误:
因为您尚未指定
g
的值。如果为
g
指定值:然后你会得到错误:
因为外键约束在引用的表中找不到匹配的值。
然后,如果将值插入
table3
,以便有一行供参照约束引用:然后:
工作。
fiddle
wpcxdonn3#
首先将数据插入父表,然后复制主表的主键并将数据作为外键发送到子表。
关键点-。别忘了承诺。在步骤中插入数据。先是主人,然后是孩子。如果你这样做只是为了学习。我会建议你禁用键。首先只学习DML部分。之后,您可以尝试使用约束。