SQL外键返回NULL

时间:2016-11-25 08:48:45

标签: sql-server foreign-keys

我是一个很新的SQL,并希望在我遇到外键问题时寻求帮助。我一直在搜索和谷歌搜索几天没有结果。

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

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') 

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

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

你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

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

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

据我所知(我在汽车上并不大!)你的外键指向一个表格,表示汽车的制造商(例如奥迪,宝马)。当你将数据添加到系列时,Sql Server并不知道制造商(它对汽车的了解少于我!),所以你必须告诉它。

外键约束只是意味着Sql不会,比如按键添加高尔夫,如下所示:

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

除非你已经在*CarList*表中设置了4键的大众汽车。

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

答案 1 :(得分:1)

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