2011-02-26 174 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