2012-02-28 10 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はうまく機能します。

選択サブクエリで派生テーブル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は1テーブル `attr`ために異なる別名を作るだけではないつもり作業

+0

実際、それは私がやりたいことですが、attribute_codeに応じて、別の列にvalue_idを取得します。これを行うには良い方法は何ですか? –

+0

"WHERE"ブロックを追加して、attribute_codeに条件を追加することはいつでも可能です。次回は、各行の1行以上のデータベースに対してクエリを実行し、属性には1つの値があることを覚えておいてください.WANAが別の対象であるオブジェクトデータベースを使用しない限り、2つ以上の値を取得する方法はありません。 –

関連する問題