2010-07-13 8 views
2

다음 쿼리에서 INNER JOIN의 order.id 참조에서 Unknown column 'order.id' in 'on clause' 오류가 발생했습니다. id 열이 실제로 존재합니다.SQL`order`.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 

나는

+1

을 하위 쿼리에 대한 그렇지? –

+0

INNER JOIN에서 깨는 것만으로도 다른 곳에서도 잘 작동합니다. – Webnet

답변

0

이 시도 :

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, 당신은 가장 안쪽의`SELECT`에서 order``포함되지 않습니다

+0

완벽한! 비록 내가 범위를 벗어난 이유가 아직도 궁금하지만 ... – Webnet

+0

+1이 질문에 대해, 나는 또한 이유를 알아 내고 싶다. – ceteras

0

나는 순서는 MySQL을위한 키워드 그래서

`order`.`id ` 

또는

o.id 
    | 
    | 
    | 
    FROM `order` o 
을 사용이기 때문에 문제가 생각 가입 내부에서 order .ID을 주석 처리 할 때 오류를 얻을
+0

나는 이것이 그것이라고 생각하지 않는다. 따옴표 안에있는 한 그것이 효과적 일 것이다. 그럼에도 불구하고 좋은 잡기. –

2

order .id가이 쿼리에서 범위를 벗어났습니다. 하위 쿼리의 order_return_productorder_product 테이블 만 처리합니다.

+0

하지만 여전히 기본 쿼리에 접근해야한다고 생각했습니다. 범위를 벗어난 경우 다른 하위 쿼리에서 어떻게 활용할 수 있습니까? – Webnet

+0

다른 하위 쿼리의 WHERE 절에서이 구문을 사용하고 있습니다. 오류는 'order'를 테이블의 하나로서 사용하지 않는 쿼리에 대해 ON 절에서'order'.id를 사용하려고하기 때문에 발생합니다. – Mat