我有两个表,在这两个表的每一个中都有一个主键列,另一个表(表3)有一个外键,它引用了主键上面的两列。
现在我想在表3中插入记录,如果它存在于这两个主键表中的任何一个。
注意:我不想创建一个新表,它是主键表的组合,并添加对新创建的表的引用
答案 0 :(得分:2)
正如 Erwin Brandstetter 所述here
要回答标题和文字末尾的问题:
“我仍然想知道如何让一个外键引用两个主键。”
那是不可能的。
FOREIGN KEY
约束只能指向 一个 表,每个表只能 一个 PRIMARY KEY
约束。
或者您可以在引用一个 FOREIGN KEY
(相同)的相同列上有多个 PRIMARY KEY
约束每个表。 (非常有用。)
但,单个PK或FK 可以跨越多列。
并且FK可以引用目标中任何明确定义的唯一(一组)列,而不仅仅是PK。 The manual:
外键必须引用作为主键或形成唯一约束的列。
多列PK或UNIQUE
约束只能由具有匹配列类型的多列FK约束引用。
基本建议:
答案 1 :(得分:-1)
insert into table3 (col1, col2 ...)
(select col1, col2 ... from table1
union
select col1, col2 ... from table2);
您可以选择放置where子句或将SQL拆分为2,而不是联合。
这是标准的ANSI SQL,应该适用于任何DBMS