SQL 查询优化:查找 mac_vod 表中 type_id 指定范围内且 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

需求:

在 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
)
AND type_id IN (1,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26)
ORDER BY vod_name ASC, vod_time DESC
LIMIT 30

解释:

  1. 在原始语句的基础上,添加了 AND type_id IN (1,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26) 条件,用于筛选 type_id 属于指定范围的记录。
  2. 通过使用 EXISTS 子查询,查找与当前记录 vod_name 相同,且 vod_year 相差不大于 1 的记录。
  3. 使用 ORDER BY 语句对结果按照 vod_name 升序、vod_time 降序排列。
  4. LIMIT 30 限定返回结果数量为 30 条记录。

注意:

  • 该 SQL 语句可以根据实际情况进行修改,例如修改 type_id 的范围,调整排序方式等。
  • 在实际应用中,建议对 SQL 语句进行测试,并根据实际情况优化查询性能。
SQL 查询优化:查找 mac_vod 表中 type_id 指定范围内且 vod_name 相同且 vod_year 相差不大于 1 的数据

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

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