2013-10-19 2 views
0

이 SQL을 사용하여 연, 월, 일별로 각 판매자의 모든 주문 총계를 얻으려고합니다. 나는 아직도 내 머리 주위에 조인 포장하고 있지만, 내가 아는 것과 내가이 Mysql이 중첩 된 조인으로 조인

SELECT sellers.username, sellers.registerDate, sellers.sellerid, 
orders.orderPrice, orders.orderDate, orders.sellerid, 
count(orders.orderPrice) AS products, SUM(orders.orderPrice) AS total, 
FROM `sellers` 
JOIN 
`orders`, 
(SELECT SUM(orders.orderPrice) FROM `orders` WHERE YEAR(orderDate) = YEAR(CURDATE())) AS year, 
(SELECT SUM(orders.orderPrice) FROM `orders` WHERE MONTH(orderDate) = MONTH(CURDATE())) AS month, 
(SELECT SUM(orders.orderPrice) FROM `orders` WHERE orderDate = CURDATE()) AS day 
ON orders.sellerid = sellers.sellerid 
GROUP BY sellers.username 
HAVING total > 0 
ORDER BY total desc 
LIMIT 0 , 4 

일을해야한다고 생각하지만 나에게 오류 (# 1064 제공 - 판매자 orders.sellerid = sellers.sellerid GROUP ON 근처를 '. 라인 9)

+0

에서 ''HAVING whatever' ON single_ (유도) _table_reference 가입하지'온의 여러 clause', 테이블 참조, 가입 자명? – Wrikken

+0

명시 적 표기법 (TableA JOIN TableB)을 사용하는 경우 JOIN 후에 ON 절을 사용해야합니다. 쉼표를 사용하여 테이블을 연결하는 경우 WHERE 절에 테이블 연결 조건 (ON 절을 사용하지 않고)을 넣어야합니다. –

답변

0
You need to set ON clause on every join table not only the lastone. 

안부

JOIN 
    `orders` ON ??? = ???, 
    (SELECT SUM(orders.orderPrice) FROM `orders` WHERE YEAR(orderDate) = YEAR( CURDATE())) AS year ON orders.sellerid = sellers.sellerid, 
    (SELECT SUM(orders.orderPrice) FROM `orders` WHERE MONTH(orderDate) = MONTH(CURDATE())) AS month ON orders.sellerid = sellers.sellerid, 
    (SELECT SUM(orders.orderPrice) FROM `orders` WHERE orderDate = CURDATE()) AS day 
     ON orders.sellerid = sellers.sellerid 
+0

좋습니다. 하지만 당신이 나에게 보여준 것은 아직 작동하지 않습니다. 그것은 여전히 ​​나에게 동일한 오류 (# 1064 근처에 'ON orders.sellerid = sellers.sellerid, (SELECT SUM (orders.orderPrice) FROM'에서 7 번째 줄)을 조인의 첫 번째 문장 뒤에 표시합니다. – Gisheri

관련 문제