2016-11-25 1 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) 
) 

그리고 마지막 단계 인 I 번째 테이블의 데이터를 삽입하고있다 :

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

여기 내 문제가 실제로 발생합니다. 모두 설정하고 외래 키로 테이블을 호출하면 외래 키 값을 가져야하는 열이 NULL으로 표시됩니다. SQL Server Management Studio에서 두 테이블 간의 관계를 수행했지만 그 결과는 여전히 동일합니다.

그런 다음 조인과 두 테이블을 매핑하려고합니다. 내가 인터넷에서 읽은 모든 것은 기본적으로 값이 외래 키 열에 나타나야하는지 또는 적어도 내가 요점을 얻지 못하고 있는지를 말하는 것이 아닙니다. 첫 번째 테이블 자동차 모델이 ID로 호출하는 두 번째 테이블에 해당하도록하고 싶습니다. 따라서 AUDI 인 첫 번째 테이블에서 ID 1을 호출하여 두 번째 테이블에 80TDI 시리즈의 ID를 지정하려고합니다.

도와 주시겠습니까? 시리즈 테이블을 채울 때

답변

2

당신은 예를 들어, 외래 키 값을 삽입해야합니다

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

을 최대한 멀리 볼 수있는 외국인 (I 자동차에 큰 아니에요!) 열쇠는 자동차의 제조업체을 나타내는 테이블을 가리 킵니다 (예 : Audi, BMW). 시리즈에을 추가 할 때 Sql Server는 제조사를 알지 못하므로 (나보다 자동차에 대한 정보가 거의 없습니다!), 반드시 말해야합니다. 이미 *CarList* 표 4의 키와 폭스 바겐을 설정할 것하지 않는

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

:

외부 키 제약

는 SQL을하지, 다음과 같이 키 당신이 골프를 추가 말할 것을 의미한다.

외래 키 열을 null 허용하지 않도록 설정할 수 있습니다. 모든 항목이 상위 테이블을 참조하도록하려면이 방법을 사용하는 것이 좋습니다.

+0

당신에게 마크 감사합니다! 이제는 분명합니다. 내 마음에 오는 유일한 것은 - 두 번째 테이블에 삽입 할 엄청난 양의 데이터가 있다면 어떨까요? 해당 번호를 추가하는 데 너무 많은 시간이 걸리지 않을까요?이를 위해 자동화 된 옵션이 있습니까? 아니면이 방법을 사용해야합니까? – TheShadow

+0

아니요. 동일한 삽입 문에있는 한 눈에 띄게 오버 헤드가 증가하지 않아야합니다. 또한 데이터의 양은 단지 정수이므로 낮습니다. –

+0

감사합니다. Mark! 지금은 분명합니다 :) – 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

관련 문제