2016-11-25 103 views
1

我在SQL中頗爲新穎,想要尋求幫助,因爲我正在努力解決外鍵問題。我一直在搜索和谷歌搜索幾天沒有結果。SQL外鍵返回NULL

我的問題是我創建了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號。所以如果我想從AUDI的第一個表中調用ID 1來獲得第二個表80TDI系列的ID。

你能幫忙嗎?

回答

2

你需要插入值外鍵填充系列表時,例如:

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

至於我可以看到你的外國(我不是汽車大!)關鍵點指向汽車(如奧迪,寶馬)的製造商。當你將數據添加到系列 Sql Server不知道製造商(它對我的汽車知之甚少!),所以你必須告訴它。

外鍵約束只是意味着SQL不會,說你鍵添加一個高爾夫球如下:

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

,除非你已經設置了大衆與4在*CarList*表中的關鍵字。

順便提一下,您可以將外鍵列設置爲不允許空值 - 如果您希望確保其所有條目都引用父表,那麼這是一種很好的做法。

+0

謝謝你馬克!現在很清楚。唯一出現在我腦海的是 - 如果我有非常大量的數據插入到第二個表中,該怎麼辦?不會添加相應的數字需要太多時間?有沒有可能爲此自動選擇,或者我必須採用這種方法? – TheShadow

+0

不,它不應該明顯增加開銷,只要它在相同的插入語句中。數據量也很低,因爲它只是一個整數。 –

+0

再次感謝你馬克!現在很清楚:) – TheShadow

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 
+0

謝謝Chanukya! – TheShadow