sql嵌套查询优化

1.嵌套查询优化
优化前
这里写图片描述

SELECT
    q.id,
    q.title,
    q.question,
    q.person_name,
    q.department_name,
    r.response,
    r.create_time response_time
FROM
    tb_ent_question q
LEFT JOIN tb_ent_response r ON q.id = r.question_id
WHERE
 r.create_time = (
    SELECT
        MAX(create_time)
    FROM
        tb_ent_response r1
    WHERE
        r1.question_id = q.id
)
OR r.create_time IS NULL
ORDER BY
    q.create_time DESC

优化后
这里写图片描述

SELECT
    q.id,
    q.title,
    q.question,
    q.person_name,
    q.department_name,
    r.response,
    r.create_time response_time
FROM
    tb_ent_question q
LEFT JOIN tb_ent_response r ON q.id = r.question_id,
 (
    SELECT
        r1.id,
        r1.question_id,
        max(r1.create_time) AS create_time
    FROM
        tb_ent_response r1
    GROUP BY
        id
) a
WHERE
(
    a.id = r.id
    OR (r.create_time IS NULL)
)
GROUP BY
    q.id
ORDER BY
    q.create_time DESC
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL嵌套查询语句是指在一条查询语句中,使用另一条查询语句作为子查询,以实现更加复杂和精细的数据查询和分析。 嵌套查询语句的基本语法如下: ``` SELECT 列1, 列2, … FROM 表1 WHERE 列X IN (SELECT 列Y FROM 表2 WHERE 子查询条件); ``` 其中,子查询就是在括号内的查询语句,它返回的结果将作为外部查询语句的条件之一,常用的子查询包括: 1. 标量子查询:返回单个值的查询语句,通常用于比较和计算。 2. 列子查询:返回单列值的查询语句,通常用于过滤或聚合查询。 3. 行子查询:返回多列多行的查询语句,通常用于联结查询或子查询中的表。 举个例子,假设我们有两个表,一个是学生表(student),另一个是成绩表(score),我们想查询出所有学生的姓名和平均分数,但只要平均分数大于班级平均分数的学生,那么我们可以使用嵌套查询语句来实现: ``` SELECT name, AVG(score) AS avg_score FROM student WHERE AVG(score) > (SELECT AVG(score) FROM score) GROUP BY name; ``` 在上述嵌套查询语句中,子查询返回的是成绩表的平均分数,而外部查询语句则按照学生姓名分组,计算每个学生的平均分数,并筛选出平均分数大于班级平均分数的学生。 需要注意的是,嵌套查询语句可能会影响查询的效率和性能,特别是在处理大量数据和复杂查询条件时。因此,我们应该尽量避免嵌套查询语句的滥用,尽可能使用其他SQL高级特性和优化技术来实现复杂的数据查询和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值