构造LEFT JOIN查询报错:Unknown database 'second_query'求助
问题分析与解决
错误信息
未知数据库 'second_query'
问题背景
变量stats_group可包含一个或多个逗号分隔的字段名。将变量替换为字面量后直接在MySQL Workbench中执行查询可正常运行,生成的查询语句看起来也无问题,但通过代码拼接执行时触发上述错误。
错误根源
问题出在LEFT JOIN的ON子句拼接逻辑错误:代码中拼接JOIN条件时使用了逗号,,而非判断字段相等的等号=,导致MySQL无法正确解析CTE(公共表表达式)的关联条件,误将second_query识别为数据库名称。
具体代码问题点
原代码中拼接ON条件的循环部分:
for stat_field in stats_fields: if and_flag == 1: sql = sql + "AND " sql = sql + "first_query." + stat_field + ", second_query." + stat_field + " " and_flag = 1
这里用逗号分隔两个表的字段,不符合SQL的JOIN条件语法,正确的写法应该是用等号关联对应字段。
修正后的代码
将上述循环中的字段拼接行改为:
sql = sql + "first_query." + stat_field + " = second_query." + stat_field + " "
修正后,生成的SQL中ON子句会变成类似first_query.city = second_query.city AND first_query.age = second_query.age的正确格式,MySQL就能正确识别second_query是CTE表,而非数据库。
内容的提问来源于stack exchange,提问作者Bob Burley
相关产品推荐
相关产品推荐

