'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
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