使用Where子句过滤来自连接的mysql表的数据

时间:2012-09-18 08:17:54

标签: mysql

如何使用Balance列的where子句过滤以下查询中的数据。当我在条件中使用Balance时,我收到错误[where where子句中的未知列“Balance”]。

select *,(it.Total - p.Amount) as Balance
from invoices i
left outer join invoice_items it
    on i.ID=it.InvoiceID
left outer join payment p
    on p.InvoiceID=it.InvoiceID 
where Balance!=0;

此外,如果找不到匹配的付款记录,而不是在余额列中显示空值,我需要invoice_items表的总值。

2 个答案:

答案 0 :(得分:1)

您不能在where子句中使用别名。

重写

where (it.Total - p.Amount) <> 0

和其他部分

  select 
   (case when p.PaymentId IS NULL 
    then it.Total
    else
    (it.Total - p.Amount) 
   end)

或。 COALESCE表示:如果p.Amount为null,则使用0.否则使用p.Amount

select it.Total - COALESCE(p.Amount, 0)

最后

select i.*,(it.Total - COALESCE(p.Amount, 0)) as Balance
from invoices i
left outer join invoice_items it
    on i.ID=it.InvoiceID
left outer join payment p
    on p.InvoiceID=it.InvoiceID 
where it.Total - COALESCE(p.Amount, 0) <> 0;

答案 1 :(得分:0)

试试这个:

select *,(it.Total - p.Amount) as Balance
from invoices i
left outer join invoice_items it
    on i.ID=it.InvoiceID
left outer join payment p
    on p.InvoiceID=it.InvoiceID 
where (it.Total - p.Amount) <> 0;

你不能在where子句中使用别名,因为按时间顺序,WHERE发生在SELECT之前,它始终是执行链中的最后一步。