2012-02-28 59 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