2017-04-18 4 views
0

단순화로, 나는 네 개의 테이블, 서적, 출판사, 저자 및 회사가 있습니다. 책과 게시자 모두 작성자에 대한 참조가 있으며 이지만 해당 참조는 null 일 수 있습니다.SQL 조인 테이블은 두 가지 다른 테이블 중 하나에서 최적화 된 검색

저자는 이처럼 OR 조인 쿼리를 사용하여 작성자 테이블에 가입 할 수 있지만 매우 느립니다.

편집 다른 테이블에 가입하려면 작성자 테이블을 사용해야합니다.

스키마 : 내가 대신 OR 조건에 합류으로,이 쿼리를 최적화 할 수있는 가장 좋은 방법은 어떻게 될지 궁금

schema design

select book.title, author.name, company.name as company_name from book inner join publisher on book.publisher_id = publisher.id inner join author on (book.author_id = author.id OR publisher.author_id = author.id) inner join company on author.company_id = company.id;

. 감사합니다

+0

질문에 테이블 구조 (텍스트)를 추가하십시오. –

답변

0

정확합니다. ON 절의 OR은 실제로 쿼리 속도를 늦출 수 있습니다. 당신은 단지 테이블 중 하나에 일치와 행을 반환하려는 경우 where ab.id is not null or ap.id is not null을 추가해야 할 수도 있습니다, 공식적으로

select b.title, coalesce(ab.name, ap.name) as name 
from book b inner join 
    publisher p 
    on b.publisher_id = p.id left join 
    author ab 
    on b.author_id = ab.id left join 
    author ap 
    on p.author_id = ap.id; 

대신

left join S를 사용합니다.

+0

답변을 주셔서 감사합니다. 실제로 다른 테이블에 가입하려면 해당 작성자 테이블을 사용해야하므로 질문을 업데이트했습니다. –