SQLite3可运行的查询在SQL Server报语法错误,如何改写为标准SQL
语法错误产生原因
- 直接触发报错的原因是SQL Server不支持
FROM子句中表别名外层包裹多余括号:原语句第三行FROM (names_of_numbers as numbers1)中的括号是非标准写法,SQLite做了兼容处理,但SQL Server解析时会把这个括号判定为语法错误,就是提示的)附近语法问题的来源。 - 额外的不兼容点:SQL Server没有内置
substr函数,对应的字符串截取功能需要用标准SQL函数SUBSTRING实现。 - 原语句使用的逗号分隔多表的隐式连接写法属于老式SQL语法,不符合现代SQL规范,可读性差且容易产生意外的笛卡尔积问题。同时原语句未对非聚合列
variables.value声明GROUP BY,仅在SQLite的兼容模式下可执行,不符合标准SQL要求。
符合标准SQL规范的改写语句
SELECT 100. * COUNT(DISTINCT names_of_numbers.language_name) / variables.value AS "Percentage of Indo-European languages in which the words for 2 and 10 start with the same letter." FROM names_of_numbers AS numbers1 INNER JOIN names_of_numbers ON numbers1.language_name = names_of_numbers.language_name INNER JOIN languages ON names_of_numbers.language_name = languages.language_name CROSS JOIN variables WHERE variables.variable_name = 'Number of Indo-European languages' AND languages.language_family = 'Indo-European' AND SUBSTRING(numbers1.word, 1, 1) = SUBSTRING(names_of_numbers.word, 1, 1) AND numbers1.value = 2 AND names_of_numbers.value = 10 GROUP BY variables.value;
内容的提问来源于stack exchange,提问作者FlatAssembler
相关产品推荐
相关产品推荐

