SEDE查询获取特定分数与标签问题时出现语法错误求助
语法错误原因
你的SQL脚本触发**Line 5: Incorrect syntax near the keyword "FROM"**错误,核心问题很明确:
- 一个完整的SELECT查询只能有一个主
FROM子句和一个主WHERE子句,你写了两组FROM+WHERE,SQL解析器无法识别这种断裂的结构,直接报错。 - 你试图分开处理标签筛选和主条件筛选,但没把这两部分逻辑合并成连贯的查询。
修正后的SQL脚本
方式一:直接关联所有表(推荐)
把标签筛选的关联逻辑和主查询的用户关联、条件判断合并到一个完整查询里:
SELECT p.Title, p.Id, p.Score, p.ViewCount, u.DisplayName, p.Tags FROM Posts p INNER JOIN Users u ON p.OwnerUserId = u.Id INNER JOIN PostTags pt ON p.Id = pt.PostId INNER JOIN Tags t ON t.Id = pt.TagId WHERE p.PostTypeId = 1 -- 仅筛选问题类帖子 AND p.Score BETWEEN 0 AND 10 -- 分数限定在0到10之间 AND p.AcceptedAnswerId IS NULL -- 无已接受答案的帖子 AND t.TagName = ##tagName:string?logical-deduction## -- 指定要筛选的标签 ORDER BY p.Score DESC
方式二:子查询筛选标签帖子
先通过子查询拿到符合标签的帖子ID,再和主表关联,适合逻辑拆分更清晰的场景:
SELECT p.Title, p.Id, p.Score, p.ViewCount, u.DisplayName, p.Tags FROM Posts p INNER JOIN Users u ON p.OwnerUserId = u.Id WHERE p.PostTypeId = 1 AND p.Score BETWEEN 0 AND 10 AND p.AcceptedAnswerId IS NULL AND p.Id IN ( SELECT pt.PostId FROM PostTags pt INNER JOIN Tags t ON t.Id = pt.TagId WHERE t.TagName = ##tagName:string?logical-deduction## ) ORDER BY p.Score DESC
关键细节说明
- 用
BETWEEN 0 AND 10替代Score >=0 AND Score <=10,语法更简洁易读。 - 直接引用
p.Tags显示帖子的所有标签,原代码里的q表是重复引用的Posts表,完全没必要。 - 所有表的关联条件要对应正确:Posts的Id关联PostTags的PostId,Tags的Id关联PostTags的TagId。
内容的提问来源于stack exchange,提问作者CrSb0001
相关产品推荐
相关产品推荐

