2015-07-13 95 views
0
SELECT 
a.objid AS acctid, 
a.acctno, 
a.name, 
a.meterid, 
m.serialno, 
(
    SELECT 
    objid 
    FROM 
    waterworks_meter_reading r 
    WHERE r.meterid = a.meterid 
    AND r.month = 6 
    AND r.year = 2015 
    LIMIT 1 
) AS readingid 
FROM waterworks_account a 
INNER JOIN waterworks_meter m ON a.meterid = m.objid 
INNER JOIN waterworks_account_address ad ON a.objid = ad.parentid 
WHERE ad.barangayid LIKE '%' 
AND readingid IS NULL 

當我試圖它上面引發錯誤來執行查詢:在「where子句」未知列「readingid」。有人可以向我解釋爲什麼?未知列在「readingid」「where子句」

回答

2

在SQL中,不能引用在相同的水平在一個select定義的where子句中列別名(或在別處select)。

在某些情況下,MySQL有一個方便的解決方法。您可以having條款中引用它。所以這應該做你想要的:

WHERE ad.barangayid LIKE '%' 
HAVING readingid IS NULL 
+0

是的,它的工作!謝謝! –

1

我認爲問題在於「readingid」並不是真正的列名。它存在於select中,但發生在where子句之後。我將使用嵌套查詢來獲取「readingid」,以便它可用於where子句。

例如:

SELECT 
a.objid AS acctid, 
a.acctno, 
a.name, 
a.meterid, 
m.serialno FROM waterworks_account a 
INNER JOIN waterworks_meter m ON a.meterid = m.objid 
INNER JOIN waterworks_account_address ad ON a.objid = ad.parentid 
WHERE ad.barangayid LIKE '%' 
AND NOT EXISTS (SELECT 
    objid 
    FROM 
    waterworks_meter_reading r 
    WHERE r.meterid = a.meterid 
    AND r.month = 6 
    AND r.year = 2015) 
+0

你能給我一個解決方案如何解決這個問題嗎? –

+0

增加了SQL示例 –