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

验证MySQL EXCEPT查询正确性:筛选可删除的2023年备考资料路径

你的SQL查询问题分析

核心需求回顾

要筛选仅被2023年测试关联的备考资料路径——也就是排除那些同时被2024年或其他年份测试依赖的路径,最终用来删除这些路径的文件及对应数据库记录。

当前查询的问题

你写的EXCEPT语句存在逻辑漏洞:

  • EXCEPT是对整行数据进行去重排除,而你的查询返回的字段包含tests.id、tests.year、tests.Name_t这些和具体测试绑定的字段。
  • 举个例子:假设某个PATH同时被2023年的testA和2024年的testB关联,那么左边查询会返回(PATH, testA.id, 2023, testA.Name),右边查询返回(PATH, testB.id, 2024, testB.Name)——这两行完全不同,EXCEPT不会排除左边的记录,最终会把这个被2024年共享的PATH错误地保留下来,完全不符合你的需求。

正确的查询写法

写法一:排除被其他年份关联的路径

SELECT DISTINCT tpm.PATH
FROM test_prep_materials tpm
JOIN tests t ON tpm.TID = t.ID
WHERE t.YEAR = 2023
AND tpm.PATH NOT IN (
    SELECT DISTINCT tpm2.PATH
    FROM test_prep_materials tpm2
    JOIN tests t2 ON tpm2.TID = t2.ID
    WHERE t2.YEAR <> 2023
);

写法二:分组统计仅被2023年关联的路径

SELECT tpm.PATH
FROM test_prep_materials tpm
JOIN tests t ON tpm.TID = t.ID
GROUP BY tpm.PATH
HAVING MIN(t.YEAR) = 2023 AND MAX(t.YEAR) = 2023;

这两种写法都只返回仅属于2023年测试的路径,不会包含被其他年份共享的文件,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者ASDORDSAUSER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:22:35