Fusion Table带WHERE子句的查询报错问题求助
解决Fusion Table查询WHERE BETWEEN子句导致的“Data table is not defined”错误
我帮你梳理下这个问题的可能原因和解决办法——你遇到的情况在Fusion Table里挺常见的,主要是它的SQL语法细节和数据类型要求跟其他数据库有点不一样:
可能的问题根源
- 字段引用格式错误:你用单引号
'Year'包裹字段名,但在Fusion Table的SQL语法里,单引号是用来定义字符串常量的,不是字段名的正确引用方式。当你写WHERE 'Year' BETWEEN 1843 AND 1915时,系统会把'Year'当成一个固定字符串去和数字比较,这显然不会匹配任何数据,最终返回空结果,图表组件因为没有数据就报错“Data table is not defined”。 - 数据类型不匹配:如果你的
Year列在Fusion Table里被识别为文本类型(而不是数字类型),那么用数字范围BETWEEN 1843 AND 1915去过滤文本格式的年份,也会导致没有符合条件的数据返回。比如文本"1915"和数字1915的比较逻辑和纯数字比较完全不同。 - 空查询结果:如果上述任何一个问题导致查询返回0条数据,图表就会因为没有可渲染的数据而触发“Data table is not defined”的错误。
解决步骤
- 修正字段引用格式:去掉字段名的单引号(如果字段名没有空格或特殊字符,直接写就行;如果有,用反引号
`包裹)。修改后的查询语句应该是:var query = "SELECT Year, Birth FROM 1yBq_Zz3iPsK3U49NIp-yc5uXVrato3hKXxqsjyzk WHERE Year BETWEEN 1843 AND 1915 ORDER BY Year"; - 确认列的数据类型:打开你的Fusion Table,找到
Year列,检查它的类型是否为「Number」(数字)。如果是「Text」(文本),右键点击列头选择「Change column type」改成数字类型。 - 测试查询有效性:在Fusion Table的顶部菜单选择「Tools」->「Query」,把修改后的SQL粘贴进去执行,看看是否返回1843-1915年的记录。如果这里能返回数据,那放到代码里应该就能正常渲染折线图了。
另外补充一句:虽然这条SQL在其他数据库里可能能正常运行,但Fusion Table的SQL实现有自己的规则,对字段引用和数据类型的要求更严格,这也是导致你遇到问题的核心原因。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

