2010-09-29 144 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 
相關問題