2011-02-26 170 views
0

我正在使用以下查詢來比較兩個表中的值。 SUM(u.val)是付款總額,我想將該值與發票金額(r.p_val)進行比較,並僅列出具有較低值od SUM的值。Mysql比較表中的值

SELECT u.nmb, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb 
WHERE total_val < r.p_val 
GROUP BY u.nmb 

與此查詢我遇到錯誤「未知列‘total_val’在‘where子句’」

我只得到了一個結果與個人價值,而不是支付總額進行比較的查詢。該查詢看起來像這樣:

SELECT u.nmb, u.val, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb 
WHERE u.val < r.p_val 
GROUP BY u.nmb 

有沒有辦法做一些類似的查詢,並獲得所需的結果?

感謝您的任何建議。

回答

2

更改要去的地方。 WHERE沒有獲得在選擇列表中也沒有GROUP BY定義聚集列:

SELECT u.nmb, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb 
GROUP BY u.nmb 
HAVING SUM(u.val) < r.p_val 
+0

謝謝。這個查詢完全符合我的需要。如果我想在表格「inv」中獲得列表和那些沒有任何付款(記錄)的發票,我該怎麼做? – Sergio 2011-02-26 13:02:23

+0

將INNER JOIN更改爲LEFT JOIN – agsamek 2011-02-26 13:04:56

+0

我試過這個,但只有在表「inv」的記錄中有發票的記錄時,帶有LEFT JOIN的查詢纔有效。沒有該發票的記錄,它不會列出發票。 – Sergio 2011-02-26 13:11:02

0

您不能在WHERE子句中使用列別名。用原始查詢中的SUM(u.val)替換total_val,它應該可以工作。

1
SELECT u.nmb, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb   
GROUP BY u.nmb 
HAVING total_val < r.p_val