SQL 查询优化:查找 vod_name 相同且 vod_year 相差不大于 1 的数据

需求: 在 mac_vod 表中 type_id IN (1,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26) 中查询 vod_name 相同并且 vod_year 相差不大于 1 的数据内容。

原始 SQL 语句:

SELECT vod_id, type_id, vod_name, vod_year, vod_time
FROM mac_vod AS t1
WHERE EXISTS (
    SELECT 1
    FROM mac_vod AS t2
    WHERE t1.vod_name = t2.vod_name
    AND t1.vod_year - t2.vod_year <= 1
    AND t1.vod_year - t2.vod_year >= -1
    AND t1.vod_id <> t2.vod_id
)
ORDER BY vod_name ASC, vod_time DESC
LIMIT 30

修改后的 SQL 语句:

SELECT t1.vod_id, t1.type_id, t1.vod_name, t1.vod_year, t1.vod_time
FROM mac_vod AS t1
WHERE t1.type_id IN (1,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26)
AND EXISTS (
    SELECT 1
    FROM mac_vod AS t2
    WHERE t1.vod_name = t2.vod_name
    AND t1.vod_year - t2.vod_year <= 1
    AND t1.vod_year - t2.vod_year >= -1
    AND t1.vod_id <> t2.vod_id
)
ORDER BY t1.vod_name ASC, t1.vod_time DESC
LIMIT 30

优化说明:

  • 在 WHERE 条件中加入 t1.type_id IN (1,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26) 限制查询范围,提高效率。
  • 使用 t1t2 作为别名,提高代码可读性。
  • 在 ORDER BY 语句中加入 t1. 明确指定排序的列,避免歧义。
SQL 查询优化:查找 vod_name 相同且 vod_year 相差不大于 1 的数据

原文地址: https://www.cveoy.top/t/topic/qnNI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录