2013-10-19 122 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 - 近「ON orders.sellerid = sellers.sellerid GROUP BY賣家。用戶名HAVING」在第9行)

+0

'JOIN single_(派生)_table_reference ON whatever',不'加入多個,表,參考文獻,與,一個ON 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的命令.sellerid = sellers.sellerid,(選擇SUM(orders.orderPrice)FROM'在第7行)在連接的第一個語句後。 – Gisheri