【问题标题】:One foreign key references multiple primary keys一个外键引用多个主键
【发布时间】:2018-02-15 13:21:46
【问题描述】:

我有两个表,这两个表中的每一个都有一个主键列,另一个表(表 3)有一个外键,它引用了主键列以上的两个列。

现在我想将记录插入到表 3 中,如果它出现在这两个主键表中的任何一个中。

注意:我不想创建一个由主键表组合的新表并添加对新创建表的引用

【问题讨论】:

  • 你遇到了什么错误?
  • @ZaidMirza - /*create table table1(id int primary key) * / /* create table table2(id int primary key) */ /*create table table3(id int foreign key references table1( id)) */ /*alter table table3 add constraint fk_id foreign key(id) references table2(id)*/......In This table 3 is refereing both table1 and table2 .now I want to enter records in table3 如果它在 table1 或 table2 中具有相同的记录。有什么办法可以做到 sql server
  • @ZaidMirza- 在上面的例子中提到它允许我将数据输入到 table3 如果它存在于两个表(table1 和 table2)中

标签: sql sql-server database performance


【解决方案1】:

正如 Erwin Brandstetter 所说 here

FK 约束规则

要回答标题和文本末尾的问题:

“我仍然想知道如何让一个外键引用两个主键。”

这是不可能的。

  • 一个FOREIGN KEY约束只能指向一个表,每个表只能有一个@ 987654323@约束。

  • 或者,您可以在同一列上设置 多个 FOREIGN KEY 约束,分别引用一个(不同)表的 一个 PRIMARY KEY。 (很少有用。)

但是,单个 PK 或 FK可以跨越多个列。
FK 可以引用目标中任何明确定义的唯一(组)列,而不仅仅是 PK。 The manual:

外键必须引用作为主键或形成唯一约束的列。

多列 PK 或 UNIQUE 约束只能由具有匹配列类型的多列 FK 约束引用。

基本建议:

【讨论】:

    【解决方案2】:
    insert into table3 (col1, col2 ...)
    (select col1, col2 ... from table1
    union
    select col1, col2 ... from table2);
    

    您可以选择放置 where 子句或将 SQL 拆分为 2,而不是联合。

    这是标准的 ANSI SQL,应该适用于任何 DBMS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2012-07-02
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多