[英]MySQL gives me "unknown column" error on Windows
I have the following query executed on Node.Js using MySQL:我使用 MySQL 在 Node.Js 上执行了以下查询:
SELECT COUNT(DISTINCT t.uid) AS usersCount, COUNT(*) AS workingDaysCount
FROM (
SELECT d.date, u.id AS uid,
CASE TIMESTAMPDIFF(day, SUBDATE(d.date, WEEKDAY(d.date)), d.date)
WHEN 0 THEN w.monday
WHEN 1 THEN w.tuesday
WHEN 2 THEN w.wednesday
WHEN 3 THEN w.thursday
WHEN 4 THEN w.friday
WHEN 5 THEN w.saturday
WHEN 6 THEN w.sunday
ELSE NULL
END AS working_day
FROM (
SELECT date_range.date
FROM (
SELECT CURDATE() - INTERVAL (sign.a * (a.a + (10 * b.a) + (100 * c.a) + (1000 * e.a) )) DAY AS date
FROM (SELECT -1 AS a UNION ALL SELECT 1) AS sign
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS e
ORDER BY date DESC
) date_range
WHERE date_range.Date BETWEEN DATE('2021-06-10') AND DATE('2021-06-10')) d, users u
LEFT OUTER JOIN working_days w ON w.id = (
SELECT id
FROM working_days
WHERE user_id = u.id AND week_start_date <= d.date
ORDER BY week_start_date DESC
LIMIT 1
)
WHERE u.id IN (4)
GROUP BY d.date, u.id
) t
WHERE t.working_day = 1;
On Linux Server it works fine so I don't get where the problem is, but on Windows I have the following error:在 Linux 服务器上它工作正常,所以我不知道问题出在哪里,但在 Windows 上我有以下错误:
#1054 - Unknown column 'd.date' in 'where clause'
I've looked into the code and debugged for hours, but I didn't found any answers regarding to this.我已经查看了代码并调试了几个小时,但我没有找到任何关于此的答案。 Does anyone have any ideas please?
请问有人有什么想法吗?
The problem point is in combining cartesian by a comma and JOIN.问题点在于通过逗号和 JOIN 组合笛卡尔。
The subquery aliased as t
looks like别名为
t
的子查询看起来像
SELECT ...
FROM (...) d, u LEFT OUTER JOIN working_days w ...
The comma priority is less then JOIN priority, hence the query is逗号优先级低于 JOIN 优先级,因此查询是
SELECT ...
FROM (...) d, ( u LEFT OUTER JOIN working_days w ... )
ie u
and w
are joined firstly.即
u
和w
首先加入。 Of course, the subquery d
is not accessible in this moment.当然,此时子查询
d
不可访问。
Replace a comma with CROSS JOIN:用 CROSS JOIN 替换逗号:
SELECT ...
FROM (...) d
CROSS JOIN u
LEFT OUTER JOIN working_days w ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.