2014-12-02 3 views
2
Select book_id,title 
from Publisher 
natural join Book natural join Category 
where Publisher.name='thomas hardy' AND Category.name='computer science'; 
+1

너무 나빠요? 질문 있니? –

+0

왜 NATURAL JOIN을 사용하고 있습니까? 여기서 요구되는 것은 무엇입니까? – tadman

+0

특정 게시자와 카테고리에 대한 모든 책 제목을 가져와 테이블에서 두 ID를 검색 한 다음 책 테이블과 결합하여 책을 찾으려면 자연 결합을 사용하지 않아야합니까? – user3600154

답변

2

그냥 natural join을 피하십시오. 같은 열을 찾고 어딘가에 놓칠 수도 있습니다. 예를 들어, 내가 만드는 거의 모든 테이블에는 CreatedAt 열이 있습니다. 그리고 이로 인해 NATURAL JOIN이 실패하게됩니다.

Select book_id,title 
from Publisher join 
    Book 
    using (Publisher_Id) join 
    Category 
    using (Category_Id) 
where Publisher.name = 'thomas hardy' AND Category.name = 'computer science'; 

는 사실, 신비가 해결 대신

USING 절 또는 명시 적 ON을 포함한다. NATURAL JOINname을 키로 사용합니다. 그리고 게시자가 카테고리 이름과 정확히 일치하는 이름을 가진 게시자는 없다고 생각합니다.

0

자연 결합을 사용하면 동일한 이름을 가진 필드에서 테이블이 조인된다는 것을 의미합니다. 게시자 표 및 카테고리 표의 입력란 중 하나는 Name입니다. 자연 조인이이 입력란에 참여하게됩니다.

그런 다음 서로 다른 기준으로 두 필드를 필터링합니다. 두 테이블이 조인 된 후에는 두 필드에 다른 값을 사용할 수 없습니다.

는 서면과 유사 할 것입니다 :

Select foo FROM bar WHERE foo="something" and foo="Something Else" 

그것은 이해되지 않는다. 자연스러운 조인은 좋지만 모든 JOIN 조건에 대해 명시 적으로 표현하는 것이 좋을지도 모릅니다. 결국 ... 코드의 주석은 일반적으로 중복되지만, 단지 주석만으로는 만들 수 없습니다.

관련 문제