引用子查询中的列,该子查询本身就是Mysql中的列

引用子查询中的列,该子查询本身就是Mysql中的列,mysql,Mysql,我尝试在子查询中引用一个列,该子查询本身就是MySql中的一个列,但我得到一个错误,指出引用的列不存在。这可能与MySql执行子查询的方式有关 SELECT language AS 'SMS type', year(ctime) AS 'Year', monthname(ctime) AS 'Month', (SELECT count(1) FROM sms_sent AS t2 LEFT JOIN history ON histor

我尝试在子查询中引用一个列,该子查询本身就是MySql中的一个列,但我得到一个错误,指出引用的列不存在。这可能与MySql执行子查询的方式有关

SELECT 
    language AS 'SMS type', 
    year(ctime) AS 'Year', 
    monthname(ctime) AS 'Month',
    (SELECT count(1) 
     FROM sms_sent AS t2 
     LEFT JOIN history ON history_id =  history.id 
     WHERE language = `SMS type` 
     AND ctime <= date_sub(makedate(year(t1.ctime), month(t1.ctime)*30), interval 1 month) 
     GROUP BY language, monthname(ctime)) AS 'Previous month',
FROM sms_sent as t1
LEFT JOIN history ON history_id = history.id 
GROUP BY language, monthname(ctime)

有趣的是,如果我引用外部查询年份的列作为子查询的年份,那么它就可以工作了。。。问题是,在外部查询中,我希望使用monthname函数,而在子查询中,使用month函数

Mysql不是SQL Server,它是,但你可能认为它与我的问题无关……不,它不是。SQL Server=MSSQL!!我知道你要去哪里,但相信我,任何支持SQL的RDBMS本身就是SQL服务器。如果您在这个社区中使用Microsoft SQL的SQL Server标记,我很好。如果您引用错误消息而不是将其解释器化,这会有所帮助。还有你的子查询。。。由于“上一个月”只允许返回单个值,因此,如果您的group by在多个行中生成您可能想要加入该子查询的结果,则它将不起作用?。此外,makedate公式看起来可疑,如果它给出了您期望的日期,您应该在某些日期对其进行测试。另外,您还有一个额外的,在您的from之前。因此,您可能需要添加:错误消息、示例数据、当前和预期输出。