Mysql比较表中的值

时间:2011-02-26 12:52:16

标签: php mysql

我正在使用以下查询来比较两个表中的值。 SUM(u.val)是总付款的值,我想将该值与发票价值(r.p_val)进行比较,并仅列出具有较低值od SUM的那些。

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

使用此查询,我在'where子句'

中收到错误“未知列'total_val'

我只设法通过查询来获得结果,该查询比较了各个值而不是总付款。该查询如下所示:

 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

有没有办法进行类似的查询并获得所需的结果?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:2)

将WHERE更改为HAVING。 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  

答案 1 :(得分: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

答案 2 :(得分:0)

您不能在WHERE子句中使用列别名。用原始查询中的SUM(u.val)替换total_val,它应该可以工作。