【问题标题】:SQL foreign key returns NULLSQL 外键返回 NULL
【发布时间】:2016-11-25 17:18:42
【问题描述】:

我是 SQL 的新手,在遇到外键问题时想寻求帮助。我已经搜索和谷歌搜索了几天没有结果。

我的问题是我正在创建 2 个表,其中一个带有主键,第二个带有主键和外键。您可以在下面看到示例代码:

CREATE TABLE CarList
(
    C_Id int IDENTITY (1,1) PRIMARY KEY,
    Car_Model nvarchar(255),
)

然后我将数据插入到这个表中,如下所示:

INSERT INTO CarList (Car_Model)
VALUES ('AUDI'), ('BMW'), ('PORSCHE')

然后我用外键创建第二个表,如下所示:

CREATE TABLE Series
(
    S_Id int IDENTITY (1,1) PRIMARY KEY,
    Car_Series nvarchar(255),
    Car_Id int FOREIGN KEY REFERENCES CarList(C_Id)
)

作为最后一步,我将插入第二个表的数据:

INSERT INTO Series(Car_Series)
VALUES ('911c'), ('330d'), ('80TDI') 

我的问题实际上来了。一旦我设置了所有并使用外键调用表,应该具有外键值的列将显示为NULL。我已经在 SQL Server Management Studio 中完成了两个表之间的关系,但结果仍然相同。

然后我尝试使用连接映射两个表,但仍然相同。我在互联网上读到的所有内容基本上都不是说值应该如何出现在外键列中,或者至少我没有明白这一点。我希望第一个表汽车型号与通过 ID 调用它们的第二个表相对应。因此,如果我想从第一个表中调用 ID 1,即 AUDI,以在第二个表中获取 80TDI 系列的 ID。

你能帮忙吗?

【问题讨论】:

标签: sql-server foreign-keys


【解决方案1】:

在填充Series表时需要为外键插入一个值,例如:

INSERT INTO Series(Car_Series)
VALUES
('911c', 3),
('330d', 2),
('80TDI', 1)

据我所知(我对汽车不感兴趣!)您的外键指向一个表,该表表示汽车(例如奥迪、宝马)的制造商。当您将数据添加到 Series 中时,Sql Server 不知道制造商(它对汽车的了解比我还少!),所以您必须告诉它。

外键约束只是意味着Sql不会,说你添加一个Golf的键如下:

 INSERT INTO Series(Car_Series)
VALUES
('Golf', 4)

除非您已经在您的 *CarList* 表中设置了 Volkswagen 的密钥为 4。

顺便说一句,您可以将外键列设置为不允许空值 - 如果您想确保其所有条目都引用父表,这是一个很好的做法。

【讨论】:

  • 谢谢马克!现在已经很清楚了。我唯一想到的是——如果我有大量数据要插入第二个表怎么办?添加相应的数字不会花费太多时间吗?是否有自动选项或者我必须采用这种方法?
  • 不,只要它在同一个插入语句中,它就不应该显着增加开销。数据量也很低,因为它只是一个整数。
【解决方案2】:
you need to insert data in  foreign key when populating the Series table

  CREATE TABLE CarList
(
C_Id int IDENTITY (1,1) PRIMARY KEY,
Car_Model nvarchar(255),
)

INSERT INTO CarList (Car_Model)
VALUES
('AUDI'),
('BMW'),
('PORSCHE')

CREATE TABLE Series
(
S_Id int IDENTITY (1,1) PRIMARY KEY,
Car_Series nvarchar(255),
Car_Id int FOREIGN KEY REFERENCES CarList(C_Id)
)

INSERT INTO Series(Car_Series,Car_Id)
VALUES
('911c', 3),
('330d', 2),
('80TDI', 1)

select * from CarList a join Series b on a.C_Id=b.Car_Id
where C_Id=1

输出

C_Id    Car_Model   S_Id    Car_Series  Car_Id
1         AUDI       3       80TDI        1

【讨论】:

  • 谢谢 Chanukya!
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多