Mysql:在子查询中使用派生表

时间:2012-02-28 10:01:00

标签: mysql

在我的(非常简化的)架构中,我有3个表:offer,attributes,attributes_offers。

我想在此查询中使用派生表中的子查询:

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?

1 个答案:

答案 0 :(得分: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尝试在另一个查询中执行它,因为你试图做的那个根本就不会工作