SQL 查询优化:查找 mac_vod 表中 type_id 指定范围内且 vod_name 相同且 vod_year 相差不大于 1 的数据
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
解释:
- 在原始语句的基础上,添加了
AND type_id IN (1,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26)条件,用于筛选 type_id 属于指定范围的记录。 - 通过使用
EXISTS子查询,查找与当前记录 vod_name 相同,且 vod_year 相差不大于 1 的记录。 - 使用
ORDER BY语句对结果按照 vod_name 升序、vod_time 降序排列。 LIMIT 30限定返回结果数量为 30 条记录。
注意:
- 该 SQL 语句可以根据实际情况进行修改,例如修改 type_id 的范围,调整排序方式等。
- 在实际应用中,建议对 SQL 语句进行测试,并根据实际情况优化查询性能。
原文地址: https://www.cveoy.top/t/topic/qnNJ 著作权归作者所有。请勿转载和采集!