2013-12-12 51 views
0

我的表的MySQL凡AS語句

Table1 : 
___________________________________ 
| ID | UserID | Amount | Date  | 
___________________________________ 
| 1 | 1  | 10  | 2014-12-10 
| 2 | 1  | 5  | 2014-12-12 
| 3 | 2  | 50  | 2014-12-12 

Table2 : 
_________________________________________________ 
| ID | UserID | Amount | Description | Date  | 
_________________________________________________ 
| 1 | 2  | 50  | Test Payment | 2014-12-10 

我希望用戶來計算的平衡。我使用這個MySQL代碼

SELECT 
Distinct(UserID) As User, 
(SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) AS Credit, 
(SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) AS Received, 
((SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) - (SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) As Balance 
FROM Table1 WHERE Balance>0 

但我不能通過作爲聲明。

回答

2

您不能訪問aliases in WHERE。你應該要麼把充分表達有或使用HAVING

SELECT 
Distinct(UserID) As User, 
(SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) AS Credit, 
(SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) AS Received, 
((SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) - (SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) As Balance 
FROM Table1 
HAVING Balance>0 

- 使用在WHERE充分體現在大多數情況下,一個奇怪的事情,因爲它會導致計算兩次。

+0

或者你可以把所有內容都放在子查詢中,但是有辦法去這裏 – Lefsler

+0

謝謝你。是工作。 –

0
 
SELECT tabel.* 
FROM (
SELECT 
Distinct(UserID) As User, 
(SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) AS Credit, 
(SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) AS Received, 
((SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) - (SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User)) as Balance 
FROM Table1 
) as tabel 
WHERE BALANCE > 0