为什么MySQL在我的SELECT中定义了“错误代码:1054.on子句”中的未知列“x”?
以下sql有什么问题:为什么MySQL在我的SELECT中定义了“错误代码:1054.on子句”中的未知列“x”?,mysql,sql,join,Mysql,Sql,Join,以下sql有什么问题: SELECT DATE(NOW())-INTERVAL seq.seq DAY sdate, u.order_type, IFNULL(c,0) c FROM ( SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 ) seq LE
SELECT DATE(NOW())-INTERVAL seq.seq DAY sdate, u.order_type, IFNULL(c,0) c
FROM (
SELECT 0 AS seq
UNION ALL SELECT 1 UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6
) seq
LEFT JOIN (
SELECT t.order_type, DATE_FORMAT(t.order_date, '%Y-%m-%d') as tdate, count(*) c
FROM `order` t
WHERE t.order_type IN (10,11)
GROUP BY t.order_type, tdate
) u ON u.tdate = sdate
为什么我会得到错误代码:1054。“on子句”中的未知列“sdate”?
基本上,我试图选择每天每种订单类型的订单数量。如果给定日期没有给定类型的订单,我希望结果为0:
| date | order_type | count |
|------------|------------|-------|
| 2018-11-09 | 10 | 2 |
| 2018-11-09 | 11 | 0 |
| 2018-11-10 | 10 | 0 |
| 2018-11-10 | 11 | 0 |
| 2018-11-11 | 10 | 1 |
| 2018-11-11 | 11 | 2 |
| 2018-11-12 | 10 | 3 |
| 2018-11-12 | 11 | 2 |
sdate在SELECT子句中定义,因此在FROM子句中不可用。您需要按连接条件中的方式指定计算:
ON u.tdate = DATE(NOW())-INTERVAL seq.seq DAY
谢谢你的洞察力。现在开始工作了,今天我学到了一些东西。显然,这是一个常见问题。请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用1个变体搜索作为标签的标题和关键字。请参见文本上方的向下投票箭头鼠标。当你有一个非重复代码问题要发布时,请阅读并采取行动。另外:阅读手册:MySQL select语句页面解决了这个问题&扩展到别处使用select别名。为了清晰和避免解析问题,一般惯例是使用explicit AS作为select列别名,使用implicit AS作为from表别名关联名。PS Re google注意,google将双引号视为要求精确字符串匹配的特殊字符。还了解站点:&其他搜索功能。可能重复的