'where clause' 中的未知列 'readingid'

Unknown column 'readingid' in 'where clause'

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

当我尝试执行上面的查询时,它抛出一个错误:Unknown column 'readingid' in 'where clause'。谁能给我解释一下为什么?

我认为问题在于 "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)

在 SQL 中,您不能在同一级别(或 select 中的其他地方)引用在 where 子句中的 select 中定义的列别名。

在某些情况下,

MySQL 有一个方便的解决方法。您 可以 having 子句中引用它。所以这应该做你想做的事:

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