2012-02-19 3 views
0

MySQL 쿼리가 작동하지 않습니다. 내가 개별 테이블이있는 모든 institutes, states, regionscountries를 들어조건부 조인을 사용하는 MySQL 쿼리

session_id 
product_id 
product_type -- 'institute','state','region','country' 

: 나는 임시 주문 다음과 같은 구조의 테이블이 있습니다.

임시 테이블에서 데이터를 가져와 product_type 필드에 따라 해당 테이블과 조인하는 MySQL 쿼리를 만들고 싶습니다.

left join에 5 개의 테이블을 사용하거나 union을 사용하는 경우 시간이 많이 걸릴 수 있습니다. 그래서 나는 다른 것을 찾고있었습니다.

+0

이러한 조인을 어떻게 원합니까? product_type 필드가 무엇입니까? 예제 또는 샘플 데이터로 명확히 할 수 있습니까? –

+0

product_type 필드의 값이 institute와 같으면 institutes 테이블과 조인을 수행하고, 값이 값이면 state는 상태 테이블과 조인을 수행합니다. – user1163513

+0

모든 데이터를 원할 경우 방법은 없지만'union '을 사용합니다. [사이먼의 대답] (http://stackoverflow.com/a/9349119/458741) 데이터베이스 구조 조정에 대해 언급하고 있습니다. – Ben

답변

2

그들은 당신의 특정 문제를 일치하는 것 같이 내가이 질문의 답을 확인 권합니다 https://stackoverflow.com/a/9327678/1213554

짧은 버전하지만 순서로하는 것이 효율적으로 잘 할 수 요청을 데이터베이스 구조 조정을 수행 할 수 있다는 것입니다 나는 두려워한다.

구체적으로 찾고자하는 것이 불가능합니다. UNION을 사용하여 다음 행에 따라 작업해야합니다. 당신이 말한대로 그것은 시간이 걸리는 작업이 될 것입니다.

(
    SELECT tempData.* 
    FROM tempData 
    INNER JOIN institutes 
    ON institutes.id = tempData.product_id 
    WHERE tempData.product_type = 'institute' 
) UNION (
    SELECT tempData.* 
    FROM tempData 
    INNER JOIN states 
    ON states.id = tempData.product_id 
    WHERE tempData.product_type = 'state' 
) UNION (
    SELECT tempData.* 
    FROM tempData 
    INNER JOIN regions 
    ON regions.id = tempData.product_id 
    WHERE tempData.product_type = 'region' 
) UNION (
    SELECT tempData.* 
    FROM tempData 
    INNER JOIN countries 
    ON countries.id = tempData.product_id 
    WHERE tempData.product_type = 'country' 
) 
관련 문제