2012-02-28 5 views
2

내 (매우 단순화 된) 스키마에는 offer, attributes, attributes_offers의 3 개의 테이블이 있습니다.Mysql : 하위 쿼리에서 파생 테이블 사용

SELECT 
    o.offer_id, 
    GROUP_CONCAT(CONCAT(attr.attribute_code,'-',attr.value_id,'-',attr.value_value) SEPARATOR ';') AS attributes, 
    (SELECT attr.value_id FROM attr WHERE attribute_code = 'area') AS area_id, 
    (SELECT attr.value_id FROM attr WHERE attribute_code = 'category') AS category_id 
FROM offers o 
INNER JOIN (
    SELECT offer_id,attribute_code,value_id,value_value 
    FROM attributes_offers ao 
    INNER JOIN attributes att USING (attribute_code) 
) AS attr ON attr.offer_id = o.offer_id 

을하지만 MySQL은 나에게 답 :

나는이 쿼리에 파생 테이블에서 하위 쿼리를 사용하려면 Table 'attr' doesn't exist.

Group_concat이 잘 작동합니다.

선택 하위 쿼리에서 파생 테이블 attr을 사용하는 방법이 있습니까?

+0

때문에 다른 쿼리를 수행하려고 value_id . 별명'attr'을 내부 조인 질의의 다른 이름으로 변경하십시오. – Bajrang

답변

0

'attr'테이블과이 테이블에서 사용하려고하는 선택 항목이 다른 블록에 있기 때문에 정상입니다 ...이 방법으로 보겠습니다. 선택하려는 항목이 상자에 있으며 사용자가 선택할 수 없습니다. 밖에있는 것을 보아라. 이

SELECT 
    o.offer_id, 
    GROUP_CONCAT(CONCAT(attr.attribute_code,'-',attr.value_id,'-',attr.value_value) SEPARATOR ';') AS attributes, 
    attr.value_id AS area_id, 
    attr.value_id AS category_id 
FROM offers o 
INNER JOIN (
    SELECT offer_id,attribute_code,value_id,value_value 
    FROM attributes_offers ao 
    INNER JOIN attributes att USING (attribute_code) 
) AS attr ON attr.offer_id = o.offer_id 

을 시도하고 당신이 와나 경우 가져올 모든 당신이해야 할 노력 r에 하나의 테이블`attr`에 대해 다른 별명 이름을 확인 간단하지 먹힐

+0

사실, 그게 내가 원하는, attribute_code에 따라 다른 열에있는 일부 value_id를 얻을거야. 이 작업을 수행하는 좋은 방법은 무엇입니까? –

+0

"WHERE"블록을 추가하고 attribute_code에 조건을 추가 할 수 있습니다. 이 다음 번에 각 행에서 하나 이상의 행에 대해 데이터베이스를 쿼리 할 때 속성이 하나의 값을 가지면 다른 하나의 객체 인 객체 데이터베이스를 사용하지 않는 한 둘 이상의 값을 얻을 수있는 방법이 없습니다. –

관련 문제