You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:18:04