今天在调试代码时发现一个项目历史遗留问题,
老是报Unknown column ‘sign.userid’ in ‘on clause’错误
然后我就将sql语句放入数据库可视化工具中,
发现还是这个错误。
然后就是一顿百度
百度搜索到的问题原因都是:
MySQL5.0 Bug, 要把联合的表用括号包含起来才行:
Sql代码
SELECT (c.id, a.id, b.id) FROM A a, B b LEFT JOIN C c ON c.a_id = a.a_id AND c.b_id = b.b_id
这句话执行应该是没有错误的,但是Mysql 5 下执行则会出错。因为mysql下有这样一个BUG,要把联合的表用括号包含起来才行:
Sql代码
SELECT (c.id, a.id, b.id) FROM (A a, B b) LEFT JOIN C c ON c.a_id = a.a_id AND c.b_id = b.b_id 。
但发现完全不是这个原因
我粘下我代码
SELECT
c. NAME AS companyname,
ifnull(o. NAME, '暂无部门') AS deptname,
ifnull(u. NAME, '暂无人员') AS NAME,
ifnull(signp, 0) AS signp,
u.id,
c.id AS companyid
FROM
sys_user u
LEFT JOIN sys_office o ON u.office_id = o.id
RIGHT JOIN sys_office c ON u.company_id = c.id
LEFT JOIN (
SELECT
point_record.userid,
SUM(point_record.point) AS signp,
any_value(point_record.createdate)
FROM
point_record
WHERE
point_record.source = 'user_sign'
AND date_format(createdate, '%Y-%m-%d') = date_format(
'2013-05-27','%Y-%m-%d')
AND (
point_record.delflag IS NULL
OR point_record.delflag != '1'
)
GROUP BY
point_record.userid
)AS SIGN ON u.id = sign.userid
我的报错是
[Err] 1054 - Unknown column ‘sign.userid’ in ‘on clause’
然后在各种尝试后发现给sign.userid加上单引号,错误消失,至于原因我也不懂,望哪位大神看到给解释下
下是我该过后代码
SELECT
c. NAME AS companyname,
ifnull(o. NAME, '暂无部门') AS deptname,
ifnull(u. NAME, '暂无人员') AS NAME,
ifnull(signp, 0) AS signp,
u.id,
c.id AS companyid
FROM
sys_user u
LEFT JOIN sys_office o ON u.office_id = o.id
RIGHT JOIN sys_office c ON u.company_id = c.id
LEFT JOIN (
SELECT
point_record.userid,
SUM(point_record.point) AS signp,
any_value(point_record.createdate)
FROM
point_record
WHERE
point_record.source = 'user_sign'
AND date_format(createdate, '%Y-%m-%d') = date_format(
'2013-05-27','%Y-%m-%d')
AND (
point_record.delflag IS NULL
OR point_record.delflag != '1'
)
GROUP BY
point_record.userid
)AS SIGN ON u.id = 'sign.userid'