Область видимости переменной в SQL `order`.id неизвестный столбец - PullRequest
2 голосов
/ 13 июля 2010

В следующем запросе ошибка Unknown column 'order.id' in 'on clause' генерируется моей ссылкой order.id в INNER JOIN. Столбец id действительно существует.

Есть идеи, почему он не доступен через подзапрос?

SELECT
    SUM(price+shipping_price) AS total_sales,
    COUNT(id) AS total_orders,
    AVG(price+shipping_price) AS order_total_average,
    (SELECT
            SUM(quantity)
        FROM `order_product`
        WHERE `order`.id = order_product.order_id
    ) as total_units,
    SUM(price+shipping_price)/7 as daily_average,
    (SELECT
            SUM(order_product.price * order_return_product.quantity)
        FROM order_return_product
        INNER JOIN order_product ON (
            order_product.order_id = `order`.id AND
            order_product.product_id = order_return_product.product_id AND
            order_product.vehicle_id = order_return_product.vehicle_id
        )
        WHERE return_id IN (
            SELECT
                id
            FROM order_return
            WHERE status_id != 3 AND
            order_return.order_id = `order`.id
        )
    ) as total_returns
FROM `order`
WHERE created >= 1278388801 AND
created <= 1279079999 AND
fraud = 0 AND
type_id = 4

Я не получаю ошибок, когда закомментирую order .id в INNER JOIN

Ответы [ 3 ]

2 голосов
/ 13 июля 2010

В этом запросе order .id выходит за рамки - вы имеете дело только с таблицами order_return_product и order_product в подзапросе.

0 голосов
/ 13 июля 2010

попробуйте это:

SELECT
    SUM(order_product.price * order_return_product.quantity)
FROM order_return_product
INNER JOIN order_product ON (
    order_product.product_id = order_return_product.product_id AND
    order_product.vehicle_id = order_return_product.vehicle_id
)
WHERE return_id IN (
    SELECT
        id
    FROM order_return
    WHERE status_id != 3 AND
    order_return.order_id = `order`.id
) 
AND order_product.order_id = `order`.id 

... для подзапроса total_returns

0 голосов
/ 13 июля 2010

Я думаю, что проблема в том, что заказ - это ключевое слово для mysql, поэтому используйте

`order`.`id `

ИЛИ

   o.id
   |
   |
   |
  FROM `order` o
...