gpt4 book ai didi

sql - 如何用另一个表的列中的值来约束一列?

转载 作者:行者123 更新时间:2023-12-04 23:53:54 25 4
gpt4 key购买 nike

这不是什么大问题,但我的强制症在我创建的数据库中出现了以下问题。我不习惯使用数据库,但数据必须存储在某个地方......

问题

我有两个表 AB

My Two Tables

其中一个数据字段对两个表都是通用的 - 。段的数量是有限的,我想编写查询,通过它们的段值将 A 的值连接到 B,就像使用了以下表结构一样:

Should be three?

但是,如您所见,Segments 表是空的。除了将 ID 提供给其他表作为外键外,我没有更多想要放入该表的内容。我希望我的表格尽可能简单,因此添加另一个表格似乎错误

另请注意,其中一个表(例如 A)实际上是 master,从某种意义上说,您应该能够将段的任何值放入 A,但是 B 在插入之前应该首先检查 A

编辑我尝试了以下答案之一:

create table A(
id int primary key identity,
segment int not null
)

create table B(
id integer primary key identity,
segment int not null
)

--Andomar's suggestion
alter table B add constraint FK_B_SegmentID
foreign key (segment) references A(segment)

这产生了以下错误。

也许我不清楚 segments 在 A 或 B 中不是唯一的,并且可以在两个表中多次出现。

Msg 1776, Level 16, State 0, Line 11 There are no primary or candidate keys in the referenced table 'A' that match the referencing column list in the foreign key 'FK_B_SegmentID'. Msg 1750, Level 16, State 0, Line 11 Could not create constraint. See previous errors.

最佳答案

您可以直接从 B.SegmentID 到 A.SegmentID 创建外键关系。不需要额外的 table 。

更新:如果 SegmentID 在 TableA 中不是唯一的,那么您确实需要额外的表来存储段 ID,并创建从两个表到该表的外键关系。然而,这不足以强制 TableB 中的所有段 ID 也出现在 TableA 中。您可以改用触发器。

关于sql - 如何用另一个表的列中的值来约束一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com