2010-09-29 46 views
1

我得到确切的错误是:

为什么我会收到“未知列”错误?

SELECT 
    o.order_id, 
    o.order_po_no, 
    o.order_ship_date, 
    acct.acct_company, 
    SUM(ROUND(i.item_qty * i.item_price, 2)) AS item_amount, (
     SELECT SUM(trans_amount) 
     FROM transactions 
     WHERE order_id = o.order_id 
     AND trans_pending =0 
     AND trans_date >= '$from_date' 
     AND trans_date <= '$to_date' 
    ) AS trans_paid 
FROM orders AS o 
    INNER JOIN accounts AS acct ON o.acct_id = acct.acct_id 
    INNER JOIN items AS i ON o.order_id = i.order_id 
    WHERE (o.order_status =7 or o.order_status = 4) 
     AND trans_paid IS NOT NULL 
     AND acct.is_wholesale =1 
     AND acct.acct_company LIKE '%".$_POST['company']."%' 
GROUP BY o.order_id 
+0

这有什么,与你的首要问题,但作为一个建议,你应该清理你的在将变量输入到查询之前发布变量。 – 2010-09-29 17:29:58

回答

3

标准SQL不允许您引用WHERE子句中的聚合列。您需要将trans_paid条件移至HAVING条款以使其工作。

变化

WHERE (o.order_status =7 or o.order_status = 4) 
    AND trans_paid IS NOT NULL 
    AND acct.is_wholesale =1 
    AND acct.acct_company LIKE '%".$_POST['company']."%' 
GROUP BY o.order_id 

WHERE (o.order_status =7 or o.order_status = 4) 
    AND acct.is_wholesale =1 
    AND acct.acct_company LIKE '%".$_POST['company']."%' 
GROUP BY o.order_id 
HAVING trans_paid IS NOT NULL 
4

您可以:

我的查询($ FROM_DATE和$ TO_DATE的格式是否正确) “在 'where子句' 未知列 'trans_paid'”在WHERE子句的SELECT原因中引用别名列。如果您想过滤它,您必须将其包装在子查询中。

0

要在Where子句中使用的别名必须在FROM子句中声明...您只需重命名列而不实际重命名对象(如表)。

0

使用此查询:

SELECT 
    o.order_id, 
    o.order_po_no, 
    o.order_ship_date, 
    acct.acct_company, 
    SUM(ROUND(i.item_qty * i.item_price, 2)) AS item_amount, 
    trans_paid 
    FROM orders AS o 
    LEFT JOIN 
    (SELECT SUM(trans_amount) AS trans_paid 
    FROM 
    WHERE trans_pending =0 
    AND trans_date >= '$from_date' 
    AND trans_date <= '$to_date' 
    ) temp 
    USING order_id 

    INNER JOIN accounts AS acct ON o.acct_id = acct.acct_id 
    INNER JOIN items AS i ON o.order_id = i.order_id 
    WHERE (o.order_status =7 or o.order_status = 4) 
     AND trans_paid IS NOT NULL 
     AND acct.is_wholesale =1 
     AND acct.acct_company LIKE '%".$_POST['company']."%' 
GROUP BY o.order_id 
相关问题