2017-11-23 5 views
0

저는 T-SQL의 초보자입니다.이 학교는 내 학교에서 의무적으로 수업을하기 때문에 공부하기가 끔찍합니다.). 나는 많은 것을 수색했지만 내 문제에 대한 답을 찾을 수 없었다.T-SQL에서 브리지 테이블 (2 개의 외래 키 행으로 구성)에 값을 삽입하는 방법

Book_ISBN (Books 테이블의 외래 키) 및 Author_ID (작성자 테이블의 외래 키)라는 두 행이있는 book_author라는 브리지 테이블이 있습니다. 여기에 내가 만든 코드가 있습니다 :

CREATE TABLE Book_Author (
    Book_ISBN BIGINT, 
    Author_ID BIGINT, 
    CONSTRAINT Pk_Book_Author PRIMARY KEY (Book_ISBN, Author_ID), 
    CONSTRAINT FK_B_A_Book_ISBN FOREIGN KEY (Book_ISBN) REFERENCES Book(Book_ISBN), 
CONSTRAINT FK_B_A_Author_ID FOREIGN KEY (Author_ID) REFERENCES Author(Author_ID) 
) 

그래서이 테이블의 값을 브리지 테이블 (book_author)에 삽입하고 싶습니다. 지금까지 여기 (데이터 추가하지 않은 때문에,하지만, 0 행에 영향을) 나를 위해 일한 것입니다 : 이미 데이터가 (책 테이블 및 저자 테이블에서) 언급 행으로

INSERT INTO Book_Author (Book_ISBN, Author_ID) 
SELECT book.Book_ISBN, author.Author_ID 
    FROM Book_Author 
    INNER JOIN Book ON Book_Author.Book_ISBN = Book.Book_ISBN 
    INNER JOIN Author on Book_Author.Author_ID = Author.Author_ID 

을, 나는 T를 생각 -SQL은 book_author 테이블에 값을 자동으로 삽입합니다 (동일한 열 이름 사용). 여기에 내가 책을 테이블에 데이터를 삽입하는 데 사용되는 코드입니다 :

INSERT INTO Book (Book_ISBN, Book_Name, Publisher_ID, Edition, Language, Genre, Year_Published) 
    VALUES ('9780261103573', 'The Fellowship of the Ring', '1', '1', 'English', 'Fantasy Fiction', '1954'), 
      ('9780007203550', 'The Two Towers', '1', '1', 'English', 'Fantasy fiction', '1960'), 
      ('9780007129720', 'The Return of the King', '1','1', 'English', 'Fantasy fiction', '1965'), 
      ('9780399900709', 'The Bourne Identity', '2', '3', 'English', 'Spy thrillers', '1980'), 
      ('9788563560520', 'Quincas Borba', '3', '5', 'Portuguese', 'Romance', '1982'), 
      ('9782864972662', 'Astérix chez les Pictes', '4', '3', 'French', 'Adventure comic books', '2012'); 

가 그리고 여기에 내가 저자 테이블에 데이터를 삽입하는 데 사용되는 코드입니다 : 당신의 도움에 미리

INSERT INTO Author (Author_ID, Author_FName, Author_LName) 
    VALUES (1, 'Tolkien', 'J.R.R.'), 
      (2, 'Robert', 'Ludlum'), 
      (3, 'Machado', 'de Assis'), 
      (4, 'Jean-Yves', 'Ferri'); 

감사합니다, 대단히 감사하겠습니다.

+0

Book_Author 테이블에 삽입하려는 샘플 데이터를 입력하십시오. – ITSGuru

+0

'book_author' 링크 테이블에 아직 값이 없으므로 (해당되는 경우) 해당 테이블에서 JOIN을 사용하여 values ​​....... 그래서 책과 저자의 목록이 주어집니다 - 어떤 저자가 어떤 책에 속해 있는지 (링크 테이블에 그 값을 삽입 할 수 있도록) 어떻게 알 수 있습니까? 이것이 바로 링크 테이블의 목적입니다. 따라서 해당 테이블에 값을 생성하려면 - 어떤 저자가 어떤 책에 속하는 지 어떻게 결정합니까? –

+0

안녕하세요 @ITSGuru! 방금 더 많은 정보를 추가했습니다. 감사! –

답변

0

간단한 삽입 쿼리에서 join을 사용하려는 이유는 무엇입니까?

INSERT INTO Book_Author (Book_ISBN, Author_ID) VALUES ('9780261103573','1') 
INSERT INTO Book_Author (Book_ISBN, Author_ID) VALUES ('9780007203550','1') 
INSERT INTO Book_Author (Book_ISBN, Author_ID) VALUES ('9780007129720','1') 
INSERT INTO Book_Author (Book_ISBN, Author_ID) VALUES ('9780399900709','2') 
INSERT INTO Book_Author (Book_ISBN, Author_ID) VALUES ('9780399900709','2') 
INSERT INTO Book_Author (Book_ISBN, Author_ID) VALUES ('9782864972662','4') 
0

삽입 명령문은 FROM 테이블의 0 행과 내부 결합이있는 선택에서 읽습니다. 따라서 결과는 항상 0 행이됩니다. 브리지 테이블에 행이있는 경우에도이 키는 선택되지만 기본 키 위반으로 인해 삽입 될 수 없습니다. 이미 존재하는 데이터를 삽입하려고 시도합니다.

나는 당신이 어딘가에 책과 같은 관계를 유지하고 있다고 가정한다. Book.Author_ID와 같다. 이 경우 다음이 필요합니다.

저자 테이블에서 비슷한 SELECT를 만들고 GROUP BY를 사용하여 고유 한 값을 얻고 두 SELECT 문에 UNION을 사용하여 두 SELECT 문에서 고유 값을 가져와야합니다.

기존 관계를 채우기위한 것입니다. 새 책의 경우 위에서 설명한 간단한 insert 문을 사용해야합니다.