0

内部を実行しSELECT、結果を疑似列として返す MySQL ステートメントがあります。WHEREこの疑似列の結果を節で使用したいと思います。現在の SQL ステートメントは次のようになります。

SELECT
    product.product_id,
    product.range_id,
    product.title,
    product.image,
    product.image_text,
    product.friendly_url,
    attribute.comfort_grade_id,
    category.category_id,
    category.category AS category_name,
    category.friendly_url AS category_friendly_url,
    (SELECT price_now FROM product_bedding_sizes AS size
        WHERE size.product_id = product.product_id
        ORDER BY size.price_now ASC LIMIT 1) AS price
FROM
    products AS product
LEFT JOIN
    categories AS category ON product.category_id = category.category_id
LEFT JOIN
    product_bedding_attributes AS attribute
         ON product.product_id = attribute.product_id
$where
$order
LIMIT
    ?,?

ただし、クエリを実行すると、次のエラー メッセージが表示されます。

#1054 - 「WHERE 句」の不明な列「価格」

どうすればこれを回避し、実際にprice節でWHERE値を使用できますか?

4

3 に答える 3

3

句は句のWHERE前に評価されるSELECTため、エイリアス名は表示されません。WHERE次のように、外側のクエリで句によってフィルターを実行する必要があります。

SELECT *
FROM
(
    SELECT
        product.product_id,
        product.range_id,
        product.title,
        product.image,
        product.image_text,
        product.friendly_url,
        attribute.comfort_grade_id,
        category.category_id,
        category.category AS category_name,
        category.friendly_url AS category_friendly_url,
        (SELECT price_now 
         FROM product_bedding_sizes AS size 
         WHERE size.product_id = product.product_id 
         ORDER BY size.price_now ASC 
         LIMIT 1) AS price
    FROM
     ...
) AS sub
WHERE price = ... <--- here it can see the price alias.

詳細については、これを参照してください。


または: 次のような相関サブクエリの代わりに、そのテーブルを結合できます。

SELECT
    product.product_id,
    product.range_id,
    product.title,
    product.image,
    product.image_text,
    product.friendly_url,
    attribute.comfort_grade_id,
    category.category_id,
    category.category AS category_name,
    category.friendly_url AS category_friendly_url,
    size.price_now 
FROM
    products AS product
LEFT JOIN
(
   SELECT product_id, MIN(price_now) AS price
   FROM product_bedding_sizes
   GROUP BY product_id
) AS size ON size.product_id = product.product_id
LEFT JOIN
    categories AS category ON product.category_id = category.category_id
LEFT JOIN
    product_bedding_attributes AS attribute ON product.product_id = attribute.product_id
$where price = ----;
于 2013-02-15T16:31:24.913 に答える
0

あなたが持っている場合

 WHERE price > 0 AND price` <= 199`

where句で

次に、HAVING句を使用してこれを実行してみてください

そのように

 $HAVING
      //-- where $having  = HAVING price > 0 AND price <= 199
于 2013-02-16T12:19:38.730 に答える
0

変数を使用してみてください:

@price:= (SELECT price_now 
          FROM product_bedding_sizes AS size 
          WHERE size.product_id = product.product_id 
          ORDER BY size.price_now ASC LIMIT 1) AS price;

次に、それを次のように参照します

WHERE @price > 9000;
于 2013-02-15T18:39:40.020 に答える