2011-12-31 5 views
0

나는 책 데이터를 가져 오는 방법을 알 수없는 데이터베이스가 있습니다. 내가 어떻게했는지, 앞으로 어떻게 할 계획을 설명 할게.여러 자식 테이블이있는 항목을 가져 오는 중

간단하게하기 위해 관계를 표시하는 것이 가장 쉽기 때문에 "책"예제를 사용하겠습니다.

Books: 
book_id 
title 
author_name 
genre_name 

는 장르별로 저자와 책에 의한 개별 책, 모든 책, 책을 조회 쉬웠다 : 전에, 나는 내가 DB에 무거운 발견이 구조를 가지고 있었다. 여기서 문제는 저자 또는 장르의 목록을 얻을 필요가있을 때입니다. 나는 ALL 권의 책을 선택하고 가능한 중복, 동일 함, 순 쿠키 등을 발견하여 브라우저에 넘겨주었습니다. 나는 이미 처리 지연을 느꼈다.

그래서 지금 내가해야 할 일은 다음과 같습니다. 나는 책 3 권, 책 1 권, 저자 2 권, 장르 3 권을 가지고 있습니다.

Books:  Authors:  Genre: 
book_id  author_id  genre_id 
title  author_name genre_name 
author_id 
genre_id 

이런 식으로, 나는 "저자가 얻을"와 "장르별로 얻을"에 영향을주지 않고 더 빨리뿐만 아니라 쉽게 모든 저자와 장르를 얻을로 author_idgenre_id하여 책에 태그를 추가 할 수 있습니다. 또한 author_idgenre_id을 변경하여 책 저자 및/또는 장르를 쉽게 변경할 수 있습니다.

하지만 책을 선택하면 일반 select * from Books where book_id=something이 장르와 작성자 ID 만 반환하면 어떻게해야합니까? 저자 이름과 장르 이름을 반환하려면 어떻게해야합니까? 하위 쿼리? 별도의 쿼리? 아니면 내가 실제로 모르는 한 줄짜리 쿼리가 있습니까?

답변

4

당신은 당신이 (좋은 디자인은 그런데 인) 별도의 테이블을 작성하지 않은 경우 당신은을 사용할 수있는 대안으로이

SELECT b.book_id, b.title, a.author_name, g.genre_name FROM Books 
INNER JOIN Authors a ON b.author_id=a.author_id 
INNER JOIN Genre g ON b.genre_id=g.genre_id 
WHERE book_id=12 

처럼 뭔가를 할 수있는 INNER 지금 가입 사용해야 DISTINCT 쿼리

SELECT DISTINCT author_name FROM Books; 
+0

이미 완료되었지만 다른 책을 처리하는 데 여전히 어려움이 있습니다. – Joseph

+0

@fskreuz 차가운 :-) 당신이 알지 못하는 경우에 대비해 옵션을 제공하기 만하면됩니다. –

관련 문제