0

私はエンティティ属性値データベース モデルを扱っています。

私の製品には多くの attribute_varchars があり、attribute_varchars には 1 つの属性があります。属性には多くの attribute_varchars があり、属性 varchar には 1 つの製品があります。attribute_decimals と attribute_texts にも同じロジックが適用されます。

とにかく、私は次のクエリを持っており、where句を使用して結果をフィルタリングしたいと思います

SELECT 
    products.id,
    (select value from attribute_texts    where product_id = products.id and attribute_id = 1) 
        as description,
    (select value from attribute_varchars where product_id = products.id and attribute_id = 2) 
        as model,
    (select value from attribute_decimals where product_id = products.id and attribute_id = 9) 
        as rate,
    (select value from attribute_varchars where product_id = products.id and attribute_id = 20) 
        as batch
FROM products
WHERE products.status_id <> 5

場所を追加したいrate > 5

試してみましたが、次のエラーが表示されます: Unknown column 'rate' in 'where clause'. 値と値のテーブルにエイリアスを追加しようとしましたが、何も機能していないようです。

4

3 に答える 3

2

MySQL では、次のことができます。

having rate > 5

MySQL はhaving句を拡張したので、group by. 機能としては疑わしいですがselect、サブクエリを使用せずに句でエイリアスを参照できます。

于 2013-11-05T16:05:01.853 に答える
1

そのような生成された列では、クエリをサブクエリとして作成し、そのように上位レベルでフィルタリングを行うのが最善の方法です。

SELECT *
FROM
(
SELECT 
    products.id,
    (select value from attribute_texts    where product_id = products.id and attribute_id = 1) 
        as description,
    (select value from attribute_varchars where product_id = products.id and attribute_id = 2) 
        as model,
    (select value from attribute_decimals where product_id = products.id and attribute_id = 9) 
        as rate,
    (select value from attribute_varchars where product_id = products.id and attribute_id = 20) 
        as batch

FROM products
WHERE products.status_id <> 5
) as sub
WHERE sub.Rate > 5
于 2013-11-05T16:04:53.157 に答える
0

属性テーブルに対してサブクエリではなく結合句を使用します。

SELECT 
    p.id,
    a_description.value AS description,
    a_model.value       AS model,
    a_rate.value        AS rate,
    a_batch.value       AS batch
FROM products p
INNER JOIN attribute_texts a_description 
    ON  a_description.product_id = p.id
    AND a_description.attribute_id = 1
INNER JOIN attribute_varchars a_model 
    ON  a_model.product_id = p.id
    AND a_model.attribute_id = 2
INNER JOIN attribute_decimals a_rate 
    ON  a_rate.product_id = p.id
    AND a_rate.attribute_id = 9
INNER JOIN attribute_varchars a_batch
    ON  a_batch.product_id = p.id
    AND a_batch.attribute_id = 20
WHERE products.status_id <> 5
  AND a_rate.value > 5
于 2013-11-05T16:09:17.543 に答える