2012-02-28 33 views
2

在我的(非常簡化的)模式中,我有3個表格:offer,attributes,attributes_offers。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效果很好。

有沒有辦法在select子查詢中使用我的派生表attr?

+0

做出不同的別名爲表'attr' 。並將別名「attr」更改爲任何其他內部聯接查詢的名稱。 – Bajrang 2012-02-28 10:13:20

回答

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 

,如果你瓦納獲取所有value_id嘗試做它在另一個查詢,因爲你[R試圖做的一個根本不是要去工作

+0

事實上,這就是我想要做的,根據attribute_code在不同的列中獲取一些value_id。有什麼好辦法做到這一點? – 2012-02-28 10:36:13

+0

您可以隨時添加「WHERE」塊並在attribute_code上添加條件。請記住,下次您在每行查詢數據庫中的一行或多行時,該屬性只有一個值,除非您使用另一個主題的對象數據庫,否則無法獲得多個值。 – 2012-02-29 10:11:16